2012-04-28 9 views
1

私はuitableviewcellサブクラスを介してカスタムセルを持つテーブルビューを持っています。セルは、結果が受信された後に変化するラベルlblResultを有する。それはうまくいきますが、私がテーブルビューをスクロールダウンすると、他のランダムセルに同じ結果ラベルが表示されます(しかし、それらのラベルはまだ適切な "名前"ラベルを持っています)。xcode/cocoa:カスタムセルの識別子を再利用する

これは再利用識別子と関係があると思いますが、わかりません。

私の問題を理解するためのコードが必要な場合はお知らせください。

セルが返される前に

static NSString *CellIdentifier = @"tableCell"; 
FriendCell *cell = 
    [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 
    cell = [[FriendCell alloc] 
      initWithStyle:UITableViewCellStyleDefault 
      reuseIdentifier:nil]; 
} 

次にcellForRowAtIndexPathでこのように作られて、セルがloadingQueue辞書に渡されます。 loadingQueue辞書から細胞をロードし、以下が呼び出されresultComplete方法がある結果ロード:

[[cell lblNumTagged] setText:[NSString stringWithFormat:@"(%d)",[thisDictionary count]]]; 
    [[cell lblNumTagged] setHidden:NO]; 

答えて

1

細胞が再使用されているので、はい、それはあるが。あなたは、セルが再利用される前に呼び出されているprepareForReuseデリゲートメソッドを使用し、そこにセルのラベルをクリアすることができ、カスタムセルクラスで

...

+0

.....最後の行の末尾に注意し、このようにそれを試してみてください。しかし、今は下にスクロールすると新しいものがクリアされますが、元に戻すと元のものもクリアされますが、その結果がそこにとどまることを望みます。 – JoshDG

+0

カスタム図面を作成する場合は、セルを返す前に[cell setNeedsDisplay]を呼び出して描画を強制的に更新する必要があります。 – Lefteris

+0

私はそれを試みた。しかし、元のセルはまだリセットされています。表示が開かれる→cellForRowAtIndexPathがビュー内のセルに対して呼び出され、下にスクロールすると、cellForRowAtIndexPathが再度呼び出され、新しいセルがフォーマットされますが、以前に作成されたセルが次のように使用されます。 1000個のオブジェクトを作成しない - >スクロールアップすると、cellForRowAtIndexPathが再度呼び出され、以前編集したセルがリセットされます。解決策として、データソースに「state」関数を実装して、cellForRowAtIndexPathに描画する必要があるものを伝える必要がありますか? – JoshDG

0

私は、これは古いが、念のために知っています。私は新しいセルを作成するときに識別子を指定していないからだと思います。

static NSString *CellIdentifier = @"tableCell"; 
FriendCell *cell = 
[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) 
{ 
    cell = [[FriendCell alloc] 
     initWithStyle:UITableViewCellStyleDefault 
     reuseIdentifier:CellIdentifier]; 
}