6

我正在向 cellForRowIndexPath 中的单元格添加项目(例如手势识别器、子视图)。如果单元正在被重用(大概),我不想添加这些,那么有没有一种方法可以轻松判断单元是新的还是被重用?

单元原型在情节提要中定义。

我没有为单元格使用自定义子类(似乎有点矫枉过正)。我正在使用单元格标签来识别子视图,所以不能使用它。

我可以使用 iOS 6 之前的方法,但肯定有更好的方法来做这么简单的事情吗?

我在网上找不到任何东西,所以害怕我可能会对某些事情感到困惑——但这是一件很难搜索的事情。

4

2 回答 2

7

解决此问题的最简单方法是检查是否存在需要添加的内容。

因此,假设您的单元格需要有一个带有标签 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 回答