使用Code更改UITableViewCell的样式

时间:2015-08-11 01:28:50

标签: ios objective-c uitableview

我有一个TableViewController子类用作我的搜索结果控制器。我没有故事板或xib因此它完全在代码中实现。我只实现了数据源方法。

我正在尝试制作样式UITableViewCellStyleSubtitle的单元格,但无法使其工作。在viewDidLoad我使用代码[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];,然后在cellForRowAtIndexPath:,我有:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
}

然而,鉴于我的registerClass电话,我不认为单元格永远是零,因此风格永远不会从默认值更改。如果我删除了registerClass调用,我会收到以下消息的崩溃:'无法使用标识符Cell对单元格进行出列 - 必须为标识符注册一个nib或类,或者在故事板中连接原型单元格& #39 ;.删除单元格的if块无效。

这是一个很小的变化,我认为不必将UITableViewCell子类化或在Storyboard中构建它。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:4)

如果您拨打cell

dequeueReusableCellWithIdentifier:forIndexPath:将永远不会为零 Apple说: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/#//apple_ref/occ/instm/UITableView/dequeueReusableCellWithIdentifier

  

dequeueReusableCellWithIdentifier:此方法将现有单元格取消(如果有单元格可用)或使用先前注册的类或nib文件创建新单元格。如果没有单元可供重用,并且您没有注册类或nib文件,则此方法返回nil。

     

dequeueReusableCellWithIdentifier:forIndexPath:此方法使现有单元格可用,或者根据您先前注册的类或nib文件创建新单元格。

尝试这样做:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
}