使用Xcode 4.6,我试图显示一个典型的UITableView,其单元格带有字幕。
如果我没错,代码是这样的:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
Test *myTest = [self listTests][indexPath.row];
cell.textLabel.text = [myTest name];
UIFont *cellFont = [UIFont systemFontOfSize:16.0];
cell.textLabel.font = cellFont;
UIFont *detailFont = [UIFont systemFontOfSize:12.0];
NSMutableString *detailText = [NSMutableString stringWithFormat:@"%d", [myTest numQuestions]];
[detailText appendString:@" preguntas."];
cell.detailTextLabel.text = detailText;
cell.detailTextLabel.font = detailFont;
return cell;
}
出于某种原因,它永远不会通过这行代码:
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
因此永远不会使用UITableViewCellStyleSubtitle
初始化单元格。
在进行[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
我可以做错什么?
真的很难受。我总是使用这个代码,它通常有效。在其他地方我还能做些什么呢?
答案 0 :(得分:9)
使用故事板原型定义单元格时会发生这种情况。在这种情况下,可重复使用的单元格是使用initWithCoder:
方法预先创建的,因此if (cell == nil)
永远不会被命中。有关详细信息,请参阅this question。
由于您似乎想要使用标准样式的单元格,将表格更改为而不是使用故事板原型或将原型设置为“字幕”应解决此问题。