动态切换tableView中的cell的种类

为什么要动态切换tableView中cell的种类呢?如果项目经理不出这种需求,你也就见不到这篇文章了:)

效果:

源码:

首先,你要准备3种cell,直接继承系统的就行了.

//
//  RootViewController.m
//  ChangeCell
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "YellowCell.h"
#import "RedCell.h"
#import "TitleCell.h"

// ------------------------------
static NSString *CELL[] = {
    @"TitleCellFlag",
    @"RedCellFlag",
    @"YellowCellFlag",
};
typedef enum : NSUInteger {
    Title,
    Red,
    Yellow,
} CellType;
// ------------------------------

@interface RootViewController ()<UITableViewDataSource, UITableViewDelegate>

@property (nonatomic, strong) UITableView  *tableView;
@property (nonatomic, strong) NSString     *changeFlag;  // 切换标签

@property (nonatomic, strong) NSArray      *dataArray;   // 数据源
@property (nonatomic, strong) NSArray      *redData;     // 红色cell数据
@property (nonatomic, strong) NSArray      *yellowData;  // 黄色cell数据

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // 初始化TableView
    _tableView = [[UITableView alloc] initWithFrame:self.view.bounds
                                              style:UITableViewStylePlain];
    _tableView.delegate   = self;
    _tableView.dataSource = self;
    [self.view addSubview:_tableView];

    // 红色cell数据
    _redData    = @[@"", @"", @"", @""];

    // 黄色cell数据
    _yellowData = @[@"", @"", @"", @"", @"", @"", @""];

    // 数据源
    _dataArray = _redData;

    // 类型
    _changeFlag = CELL[Red];

    // 4秒钟之后切换cell
    [self performSelector:@selector(runSelector:)
               withObject:nil
               afterDelay:9];
}

- (void)runSelector:(id)sender
{
    // 数据源
    _dataArray = _yellowData;

    // 类型
    _changeFlag = CELL[Yellow];

    // 重新加载数据
    [_tableView reloadData];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [_dataArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = nil;
    if (indexPath.row == 0) // 第一格cell
    {
        cell = [[TitleCell alloc] initWithStyle:UITableViewCellStyleDefault
                                reuseIdentifier:CELL[Title]];
        cell.textLabel.font      = [UIFont fontWithName:@"HelveticaNeue-Thin" size:18];
        cell.textLabel.text      = @"YouXianMing";
        cell.textLabel.textColor = [UIColor redColor];
        cell.selectionStyle      = UITableViewCellSelectionStyleNone;
    }

    if (indexPath.row != 0) // 其他cell
    {
        if ([_changeFlag isEqualToString:CELL[Red]])
        {
            cell = [[RedCell alloc] initWithStyle:UITableViewCellStyleDefault
                                  reuseIdentifier:CELL[Title]];
            cell.backgroundColor = [UIColor redColor];   // 红色
            cell.selectionStyle  = UITableViewCellSelectionStyleNone;
        }

        if ([_changeFlag isEqualToString:CELL[Yellow]])
        {
            cell = [[YellowCell alloc] initWithStyle:UITableViewCellStyleDefault
                                     reuseIdentifier:CELL[Title]];
            cell.backgroundColor = [UIColor yellowColor]; // 黄色
            cell.selectionStyle  = UITableViewCellSelectionStyleNone;
        }
    }

    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0)
    {
        return 70;
    }

    if ([_changeFlag isEqualToString:CELL[Red]])
    {
        return 100;
    }

    if ([_changeFlag isEqualToString:CELL[Yellow]])
    {
        return 200;
    }

    return 0;
}

@end

分析:

用这个来标示重用吧

有一个标签是用来切换cell类型的,以及对应的数据源

根据切换标签来决定初始化哪一种cell

就是这样子实现的.

时间: 2024-10-07 19:57:48

动态切换tableView中的cell的种类的相关文章

使用HVTableView动态展开tableView中的cell

效果: 源码: HVTableView.h 与 HVTableView.m // // HVTableView.h // HRVTableView // // Created by Hamidreza Vakilian on 25/11/2013 // Copyright (c) 2013 Hamidreza Vakilian. All rights reserved. // Website: http://www.infracyber.com/ // Email: [email protect

iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见

iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见 (2015-12-05 12:48:20)[编辑][删除] 转载▼     首先我们先明确一下问题: 1.因为UI是在主线程中更新的,不能在down数据的同时显示界面,这样会使得下载的时间占用主线程,导致的后果就是你的屏幕就那样的卡死在哪了 2.如果要解觉问题1,就势必要将其下载数据的环节放在其他分线程上来实现,但是这里还会遇见一个问题,分线程的执行是不会有序的,这样,在动态显示的过 程中,cell中的数据就会混乱的变

UITableView (4): 在TableView中移动cell和Section 从TableView中删除cell和section

一  .问题:你想用流畅直观的动画来移动和拖拽TableView中的cell和section 方案: 用moveSection:toSection:方法把一个Section移动到新位置. 用moveRowAtIndexPath:toIndexPath:方法把一个cell从当前位置移动到新位置 例子: 创建一个TableView并在其中加载3个Section,每个Section有3个cell #pragma - mark 初始化数据 - (NSMutableArray *)newSectionWi

转--动态改变UITableView中的Cell高度

往往在开发iPhone的应用过程中用得最多的应该算是UITableVIew了,凭着IOS给UITableView赋予了这种灵活的框架结构,让它不管在显示列表方面还是在排版方面都有着一定的优势.虽然UITableView功能强大,但是对于一些复杂的应用需求在开发的过程中会出现一些问题,如动态改变UITableView显示的Cell高度就是其中之一 其实想要改变UITableView的Cell高度并不难,UITableView带有一个rowHeight属性,使用他就可以改变高度了.但是这样的改变是把

OC TableView中自定义Cell实现文字滚动效果

需求:有一个动态需要更新的TableView,每一个Cell显示的内容从网络获取,并且Cell中有一个需要显示文字的Label,当文字太长的时候,不能完全显示,所以采用跑马灯的样式 实现:1. IB的方式(??) 2.纯代码(?) IB的层次关系 实现的功能: 1.动态获取文字的实际长度 2.设置滚动的收尾位置 代码: 1.TitleRolling.h @interface TitleRolling : UIViewController -(void) startScroll : (UIScro

解决tableView中cell动态加载控件的重用问题

tableView的cell,有时候需要在运行时取得对应的数据后才能够动态的创建该cell中的控件并加载到该cell中,此时,你一定会遇到重用问题,即使你能做到该cell只根据数值加载了一回控件,你也没法保证不出现重用问题:) 效果(请注意查看,移动下面的格子时,上面出现了重用的问题) 源码: YXCell.h // // YXCell.h // YXTableView // // Copyright (c) 2014年 Y.X. All rights reserved. // #import

处理TableView中cell不同状态切换的问题

效果 说明 有时候,我们需要处理TableView中cell的各种状态,比如选中,未选中或者无效状态等,虽然我们都可以很容易的实现出来,但是考虑到代码的可读性以及可维护性,需要进行一定的设计才行. 1. 状态需要封装在Model中,让model自己管理 2. cell只需要判断model中的状态,然后进行相应的改变即可 源码 https://github.com/YouXianMing/TableViewState // // ModelData.h // TableViewState // /

【iOS知识学习】_iOS动态改变TableView Cell高度

在做tableView的时候,我们有时候需要根据cell的高度动态来调整,最近在网上看到一段代码不错,跟大家Share一下. 在 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 类中获取cell的高度: CGSize boundSize = CGSizeMake(216, CGFLOAT_MAX); cell.textLabel.text

如何获取tableview中当前选中的cell

当我们点击某个cell时,会执行下面这个方法,方法中调用另一方法执行具体操作: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (0 == indexPath.section) { [self btnActionForUserSetting:self]; } } 在下面方法中怎样获取刚刚选中的那个cell,并修改它的内容呢? - (void)btnAc