2009-06-04 75 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拉取图像,并且它膨胀。