2009-04-07 7 views
1

次のメソッドは、配列からUITableViewのカスタムセルにデータを読み込みます。データは正しく読み込まれます。しかし、上記のセルのデータをスクロールダウンすると(セルは表示されません)、配列内の一見ランダムな要素に変更されます。最初に正しく読み込まれたUITableViewセル

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    cellComments=nil; 
    cellComments=(FullCommentCell *)[tableView dequeueReusableCellWithIdentifier:FullCommentCell_ID]; 
    if(cellComments==nil) 
    { 
     [[NSBundle mainBundle]loadNibNamed:@"FullCommentCell" owner:self options:nil]; 
    } 
    NSString *row = [NSString stringWithFormat:@"#%i",indexPath.row+1]; 
    [cellComments loadFullComments:[latestFMLComments objectAtIndex:(indexPath.row+1)] withCommentNumber:row]; 
    //cellComments.userInteractionEnabled=NO; 
    return cellComments; 
} 

また、セルをクリックすると次の方法で処理されます。セルのデータが配列内の何らかのランダムな要素に変わったとき - 私が(以下のメソッドを呼び出す)セルをクリックすると、セルのデータが正しいデータに変更されます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
[self tableView:tableView cellForRowAtIndexPath:indexPath]; 
} 

これが起こっている理由は何ですか?

答えて

0

UITextViewを複数行のUILabelに変更したところ、すべてが動作します。なぜこれが違いになるのか分かりませんが、うまくいきます。

1

キャッシュされたセルを使用している場合、loadFullCommentsでセルのサブビュー要素を正しくリセットしていない可能性があります。

+0

サブビュー要素をリセットするとどういう意味ですか? – zpesk

1

Elfredは正しいアイデアを持っています。

cellComments=(FullCommentCell *)[tableView dequeueReusableCellWithIdentifier:FullCommentCell_ID]; 

メソッドの呼び出しを使用するときは、などのラベル、画像、テキスト、などサブビュー/プロパティは、そのセル上のすべての時間を設定されていることを確認する必要があります。内容のない「新鮮な」セルを手に入れることはできません。

たとえば、セルをインデックス17に表示すると、以前にインデックス3にある再利用可能なセルがデキューされることがあります。このセルは、インデックス3にあったときと同じプロパティを持ちます。それらをリセットします。 (例えば「I'm Cell 3」から「I'm Cell 17」にテキストを変更する)

+0

は、ロードコメントメソッドを使って何をしているのですか?単にUITextViewのテキストを設定しますか? – zpesk

+0

ああ、私はその方法が何をしたのか分からなかった。 この方法でデバッグして、セルが個別に更新されているかどうかを確認してください。古い/ランダムなデータを持つセルは、セルの内容を適切に設定せずにセルを再利用するという古典的な症状です。 –

関連する問題