2

このコードが正常に機能する理由:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.textLabel.text = [NSString stringWithFormat:@"cell%i%i", indexPath.section, indexPath.row];
    }    
    return cell;
}

cell.textLabel.text = ...セル識別子を理解している限り、このコードはif ステートメントから行を移動した場合にのみ正しく機能するはずです。言い換えれば、ラベルのテキストが正しいのはなぜですか???

4

2 に答える 2

6

画面に表示されるよりも多くのセルを作成してみてください。それらがデキューされるとすぐに、期待するテキストが表示されなくなります...

基本的には、画面に表示される 5 行ほどで問題ありませんが、スクロールを開始するとすぐに、いくつかの「興味深い」ものが表示されます :)

于 2010-11-08T09:24:13.627 に答える
0

作成されたセルは再利用されます。これは、オブジェクトが再利用されるようにマークされていることを意味します (したがって、オブジェクトを完全に作成する手間が省けます)。

したがって、画面からスクロールすると、セルは再利用可能としてマークされます。このため、新しいセルを作成する前に、まず再利用可能なセル ([tableView dequeueReusableCellWithIdentifier:)] があるかどうかを確認します。

テーブルのセルごとに (おそらく) 異なるため、設定する必要があるテキストですが、オブジェクトの作成/破棄とは関係ありません。

于 2010-11-08T09:25:44.470 に答える