如何创建类变量?

时间:2015-03-26 09:07:40

标签: ios objective-c uitableview

我在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;
}

3 个答案:

答案 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;
}