4

使用 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];

我做错了什么?

真的是装的。我总是使用这个代码,它通常可以工作。我还能在其他地方做错什么?

4

1 回答 1

9

当您的单元格使用情节提要原型定义时,就会发生这种情况。在这种情况下,可重用单元是使用该方法预先创建的initWithCoder:,因此if (cell == nil)永远不会受到影响。有关更多信息,请参阅此问题

由于您似乎希望使用具有标准样式的单元格,因此将表格更改为使用情节提要原型或将原型设置为“字幕”应该可以解决此问题。

于 2013-03-08T11:07:52.457 回答