更新UITableViewCell子视图
问题描述:
我有一个非常简单的问题,我不能(为了我的生活)弄清楚。当我听到答案时,我知道我会打砸自己。更新UITableViewCell子视图
我有一个UITableView
,并在其上,UITableViewCell
的子类。每个单元格都有一个UIButton子视图。
如果布尔值为false,我需要禁用每个单元上的按钮;如果/当布尔值更改为true时,该按钮应该被启用。我会观察KVC。我应该在哪里为这个处理程序?在UIViewController
?如果是这样,告诉单元他们需要禁用/启用按钮的最佳方式是什么?
答
我将在cellForRowAtIndexPath
中实现显示/隐藏功能,并在更改布尔值时调用[tableView reloadData]
(或更具体的重新载入/刷新调用)。
答
我看到两种方法。
1)reloadData(如前面有人建议)
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"data.boolean"]) {
[self.tableView reloadData];
}
}
2)第二个是迭代的可见细胞。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"data.boolean"]) {
for (MyTableViewCell *cell in [self.tableView visibleCells]) {
cell.button.hidden = !self.data.boolean;
}
}
}
+1非常简短,很好的答案。更改数据源然后重新加载视图绑定到它总是更容易。 – Anupdas 2013-05-12 21:43:05
这不会太贵吗? – Baub 2013-05-12 23:53:11
这取决于您的使用情况。如果你一次改变它们,那么这可能是最有效的方法。如果您一次更改单元格并担心效率,请调用'reloadRowsAtIndexPaths:'而不是'reloadData'。 – sapi 2013-05-13 01:19:57