1

uitableviewcellサブクラスを介してカスタムセルを含むテーブルビューがあります。セルには、結果が受信された後に変更されるラベルlblResultがあります。これはうまく機能しますが、テーブルビューを下にスクロールすると、他のランダムセルにも同じ結果ラベルが付けられます(ただし、適切な「名前」ラベルが付いています)。

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

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

セルはcellForRowAtIndexPathでこのように作成されます

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

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

次に、返される前に、セルはloadingQueueディクショナリに渡されます。結果がロードされると、loadingQueueディクショナリからセルをロードするresultCompleteメソッドがあり、以下が呼び出されます。

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

2 に答える 2

1

はい、それは細胞が再利用されているからです。

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

于 2012-04-28T23:50:55.487 に答える
0

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

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

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

このようにしてみてください。最後の行の終わりに注意してください。

于 2013-06-20T12:39:46.657 に答える