6

cellForRowIndexPathのセルにアイテム(ジェスチャレコグナイザー、サブビューなど)を追加しています。セルが(おそらく)再利用されている場合はこれらを追加したくないので、セルが新しいのか、再利用されているのかを簡単に見分ける方法はありますか?

セルのプロトタイプはストーリーボードで定義されています。

セルにカスタムサブクラスを使用していません(やり過ぎのようです)。セルタグを使用してサブビューを識別しているため、使用できません。

iOS 6より前のアプローチを使用することもできますが、これほど単純なことを行うためのより良い方法は確かにありますか?

オンラインで何も見つからなかったので、何かについて混乱するかもしれませんが、検索するのは難しいことです。

4

2 に答える 2

7

これに取り組む最も簡単な方法は、追加する必要があるものの存在を確認することです。

したがって、セルにタグ42がまだ存在しない場合は、タグ42のサブビューが必要であるとします。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    UIView *subview = [cell viewWithTag:42];
    if (!subview) {
       ... Set up the new cell
    }
    else {
       ... Reuse the cell
    }
    return cell;
}
于 2013-02-15T20:10:39.033 に答える
1

iOS6より前の(登録されたクラスがない)アプローチを使用する場合と比較すると、おそらくやり過ぎですが、本当にそれを使い続けたい場合は、関連するオブジェクトを使用できます。

#import <objc/objc-runtime.h>

static char cellCustomized;

...
-(UITableViewCell *)getCell
{
    UITableViewCell *cell = [tableView dequeueReusableCellForIdentifier:myCell];
    if(!objc_getAssociatedProperty(cell, &cellCustomized)) {
        [self setupCell:cell];
        objc_setAssociatedProperty(cell, &cellCustomized, @YES, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    return cell;
}

...

(未検証)

于 2013-02-15T20:08:32.320 に答える