带有prepareForReuse的UITableViewCell不起作用

时间:2010-10-19 00:06:19

标签: iphone uitableview

我创建了一个自定义UITableViewCell,我在其中添加了一堆动态加载到其contentView的按钮。这些显示正确。

当控制加载了哪些按钮的数据发生变化时,我调用reloadData我可以看到prepareForReuse被调用:

- (void) prepareForReuse {
    NSLog(@"prep for reuse");
    [self clearButtons];
}

- (void) clearButtons {
    NSLog(@"clearButtons called");
    self.buttons;
    for (UIView* v in buttons) {
        NSLog(@"clearing a button.");
        [v removeFromSuperview];
        [v dealloc];
    }
    buttons = [[NSMutableArray alloc] init];
}

按钮不会从超级视图中删除,而是“清除按钮”。永远不会记录消息。

然后我在clearButtons中添加了对tableView:cellForRowAtIndexPath的显式调用:

CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}

[cell clearButtons];

这次我可以看到“清除按钮”。记录,一切都正确显示。

是什么给出的?从prepareForReuse调用时,为什么不删除按钮?

2 个答案:

答案 0 :(得分:4)

您必须在创建单元格时指定重用标识符,否则UITableView将不会调用您的“prepareForReuse”方法。

根据文档,您还必须调用[super prepareForReuse];

答案 1 :(得分:1)

它可能没有关系,但是你应该在createButtons中修复一些东西:

  1. 使用[v release]代替[v dealloc]
  2. 在初始化之前释放buttons
  3. 我还会问,如果删除除NSLog之外的所有内容,它是否有效?