我创建了一个自定义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调用时,为什么不删除按钮?
答案 0 :(得分:4)
您必须在创建单元格时指定重用标识符,否则UITableView将不会调用您的“prepareForReuse”方法。
根据文档,您还必须调用[super prepareForReuse];
答案 1 :(得分:1)
它可能没有关系,但是你应该在createButtons中修复一些东西:
[v release]
代替[v dealloc]
buttons
。我还会问,如果删除除NSLog之外的所有内容,它是否有效?