iOS中创建UITableViewCell的正确姿态

从iOS6开始,创建cell有了新的重用方法dequeueReusableCellWithIdentifier,创建cell通常都在数据源方法中这么写:

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
    }
    cell.textLabel.text = [NSString stringWithFormat:@"Section:%ld Row:%ld",indexPath.section,indexPath.row];

但在苹果自带的tableview中,重用方法“dequeueReusableCellWithIdentifier:forIndexPath:”带了indexPath参数,当然按照以前的写法删掉参数再判断if(cell == nil) 也是可以的,但总觉得不好,这时候同样是iOS6的新方法 “ registerClass:forCellReuseIdentifier:(如果用到了xib,注册方法为:registerNib:forCellReuseIdentifier:)” 派上了用场,这样的话创建cell就可以这样:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellId];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath];
    cell.textLabel.text = [NSString stringWithFormat:@"Section:%ld Row:%ld",indexPath.section,indexPath.row];

    return cell;
}

这样的话没有了if(cell == nil)的判断,但有时候总觉得不放心,加上原来的判断后打上断点会发现,cell永远不等于nil, 所以对于注册过的cell来说,判断是否为空已经没意义了。虽然实际上大多数cell都是用自定义类型,但倘若的确要使用系统的UITableViewCell并更改UITableViewCellStyle的话,还得用老方法。

你可能感兴趣的:(IOS开发)