我在tableview中使用不同的单元格,所以我想创建它们取决于某些东西。但创建代码是相同的,只有类名不同。如何让这更好?也许创造一些变量
id classname = (indexPath.section > 3) ? FirstCell : SecondCell;
if (indexPath.section >3)
{
FirstCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(FirstCell.class)];
if (!cell)
cell = [[FirstCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:NSStringFromClass(FirstCell.class)];
return cell;
}
else
{
SecondCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(SecondCell.class)];
if (!cell)
cell = [[SecondCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:NSStringFromClass(SecondCell.class)];
return cell;
}
答案 0 :(得分:0)
只是一个建议,我在这种情况下使用了不同的apporach。我将单元格创建代码移动到相应的tableviewcell类。
@implementation FirstCell
+ (FirstCell *) cellForTableView:(UITableView *)aTableView
{
FirstCell *cell = [aTableView dequeueReusableCellWithIdentifier:NSStringFromClass(FirstCell.class)];
if (!cell)
{
cell = [[FirstCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass(FirstCell.class)];
}
return cell;
}
@end
并且cellForIndexPath方法将具有如下形式,
if (indexPath.section > 3)
return [FirstCell cellForTableView:tableView];
return [SecondCell cellForTableView:tableView];
答案 1 :(得分:0)
Class class = (indexPath.section > 3) ? FirstCell.class : SecondCell.class;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(class)];
if (!cell)
cell = [[class alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:NSStringFromClass(class)];
return cell;
答案 2 :(得分:0)
这对你有用吗?
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
[_tableView registerClass:[FirstCell class] forCellReuseIdentifier:NSStringFromClass([FirstCell class])];
[_tableView registerClass:[SecondCell class] forCellReuseIdentifier:NSStringFromClass([SecondCell class])]; //ios 6 and above
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *identifier = (indexPath.section > 3) ? NSStringFromClass([FirstCell class]) : NSStringFromClass([FirstCell class]);
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
//cell is guaranteed not to be nil if you register it before
return cell;
}