Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更新UITableViewCell子视图_Ios_Objective C - Fatal编程技术网

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;
        }
    }
}