Ios 更新UITableViewCell子视图
我有一个非常简单的问题,我无法(以我的生命)弄明白。我知道当我听到答案时,我会打自己一巴掌 我有一个Ios 更新UITableViewCell子视图,ios,objective-c,Ios,Objective C,我有一个非常简单的问题,我无法(以我的生命)弄明白。我知道当我听到答案时,我会打自己一巴掌 我有一个UITableView,上面有UITableViewCell子类。每个单元格都有一个UIButton子视图 如果布尔值为false,我需要禁用每个单元格上的按钮;如果/当布尔值更改为true时,应启用该按钮。我将观察KVC。我应该在哪里找到处理程序?在ui视图控制器中?如果是,告诉单元格需要禁用/启用按钮的最佳方式是什么 我将在cellforrowatinedexpath中实现显示/隐藏功能,并在
UITableView
,上面有UITableViewCell
子类。每个单元格都有一个UIButton子视图
如果布尔值为false,我需要禁用每个单元格上的按钮;如果/当布尔值更改为true时,应启用该按钮。我将观察KVC。我应该在哪里找到处理程序?在
ui视图控制器中
?如果是,告诉单元格需要禁用/启用按钮的最佳方式是什么 我将在cellforrowatinedexpath
中实现显示/隐藏功能,并在更改布尔值时调用[tableView reloadData]
(或更具体的重新加载/刷新调用)。我看到两种方法
1) 重新加载数据(如前所述)
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;
}
}
}
+我的回答很简短很好。更改数据源并重新加载视图绑定总是比较容易的。这不会太贵吗?这取决于您的使用情况。如果你要同时改变它们,那么这可能是最有效的方法。如果您一次更改一个单元格并且担心效率,请调用
reloadrowsatinexpaths:
而不是reloadData
。
- (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;
}
}
}