2013-05-12 90 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; 
     } 
    } 
}