2013-05-12 88 views
2

我有一个非常简单的问题,我不能(为了我的生活)弄清楚。当我听到答案时,我知道我会打砸自己。更新UITableViewCell子视图

我有一个UITableView,并在其上,UITableViewCell的子类。每个单元格都有一个UIButton子视图。

如果布尔值为false,我需要禁用每个单元上的按钮;如果/当布尔值更改为true时,该按钮应该被启用。我会观察KVC。我应该在哪里为这个处理程序?在UIViewController?如果是这样,告诉单元他们需要禁用/启用按钮的最佳方式是什么?

回答

4

我将在cellForRowAtIndexPath中实现显示/隐藏功能,并在更改布尔值时调用[tableView reloadData](或更具体的重新载入/刷新调用)。

+0

+1非常简短,很好的答案。更改数据源然后重新加载视图绑定到它总是更容易。 – Anupdas 2013-05-12 21:43:05

+0

这不会太贵吗? – Baub 2013-05-12 23:53:11

+0

这取决于您的使用情况。如果你一次改变它们,那么这可能是最有效的方法。如果您一次更改单元格并担心效率,请调用'reloadRowsAtIndexPaths:'而不是'reloadData'。 – sapi 2013-05-13 01:19:57

0

我看到两种方法。

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