为什么要动态切换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