我有一个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中构建它。任何帮助表示赞赏。
答案 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"];
}