2009-06-04 67 views
8

我有一個自定義UITableViewCell的UITableView。在cellForRowAtIndexPath中,我將字體分配給每個單元格中的標籤,因爲用戶可以隨時更改字體大小。要更改字體大小,用戶可以點擊tableview下方的按鈕,該按鈕會使用設置來展開另一個視圖。一旦他們選擇了字體大小並點擊完成,該視圖就會消失,桌面視圖再次顯示。我在每個可視區域顯示一個單元格。因此,用戶在滾動到下一個單元格之前不會看到字體更改。當前的單元格是我想要更新的單元格。如何刷新UITableViewCell?

我試過reloadData從設置屏幕,但沒有奏效。 tableview是一個UITableViewController,但viewWillAppear一旦設置屏幕消失就不會觸發。我已經嘗試將自定義單元格設置爲tableview的屬性,以便可以從設置視圖訪問它,然後調用setNeedsDisplay和setNeedsLayout。那些也沒有工作。有什麼建議麼?

回答

5

對於仍然存在的單元格,您必須更新標籤的字體。您需要一種方法來訪問自定義單元格中的自定義標籤。

更改字體大小後做這樣的事情:

for (MyCell* cell in [theTableView visibleCells]) { 
    [cell.myLabel.font = newFont]; 
} 
+0

我在設置視圖中試過了你的代碼,但是在tableview顯示後仍然沒有改變當前單元格。如果我只是從設置視圖調用tableview調用reloadData,它工作正常。然而,這似乎是一個非常昂貴的,矯枉過正的方式來做到這一點。 – 4thSpace 2009-06-04 15:23:38

+0

我在更好地理解問題後編輯了我的答案。 – 2009-06-04 16:18:41

+0

非常感謝! – Luda 2013-01-14 10:02:40

0

我很好奇,你如何顯示您設置的屏幕?返回時應在正常情況下調用viewWillAppear。您是否使用

[self presentModelViewController:animated:] 

[self.navigationController pushViewController:animated:] 

這些應該都工作。另一方面,如果您只是將設置視圖添加爲窗口或當前視圖的子視圖或其他內容,則刪除它將不會在表視圖控制器上調用viewWillAppear

所以,如果你不使用這兩種方法之一,那麼。如果你已經是,那麼設置單元格的字體就像獲取單元格和設置字體一樣簡單。如果您使用的是標準UITableViewCell,一個與

cell.font = newFont; 

做如果您正在使用自定義的子類,顯然我不能告訴你究竟如何需要工作,但尼古拉有它的方式是正確的。

12

在你的自定義UITableViewCell中,調用[self setNeedsLayout];,它應該在下一個循環重新繪製你的單元格。我將它用於異步圖像加載,因爲我從Web拉取圖像,並且它膨脹。