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 に答える