如何刷新UITableViewCell?

时间:2009-06-04 14:00:03

标签: iphone cocoa-touch uitableview

我有一个带有自定义UITableViewCell的UITableView。在cellForRowAtIndexPath中,我为每个单元格中的标签指定一种字体,因为用户可以随时更改字体大小。要更改字体大小,用户单击tableview下方的按钮,该按钮会使用设置显示另一个视图。一旦他们选择了字体大小并单击完成,该视图就会消失并再次显示tableview。我在每个观看区域显示一个单元格。因此,用户在滚动到下一个单元格之前看不到字体更改。当前的单元格是我想要更新的单元格。

我在设置屏幕上尝试过reloadData但是没有用。 tableview是一个UITableViewController,但是一旦设置屏幕消失,viewWillAppear就不会触发。我已经尝试使自定义单元格成为tableview的属性,因此可以从设置视图访问它,然后调用setNeedsDisplay和setNeedsLayout。那些也不起作用。有什么建议吗?

3 个答案:

答案 0 :(得分:12)

在您的自定义UITableViewCell中,调用[self setNeedsLayout];并在下一个循环中重新绘制您的单元格。我用它来进行异步图像加载,因为我从Web上提取图像并且它工作得很好。

答案 1 :(得分:5)

对于仍然存在的单元格,您必须更新标签的字体。您需要一种方法来访问自定义单元格中的自定义标签。

更改字体大小后执行以下操作:

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

答案 2 :(得分:0)

我很好奇,你如何显示你的设置屏幕?返回时,应在正常情况下调用viewWillAppear。你用的是

吗?
[self presentModelViewController:animated:]

[self.navigationController pushViewController:animated:]

这些都应该有效。另一方面,如果您只是将设置视图添加为窗口或当前视图的子视图或其他内容,则删除它将不会在表视图控制器上调用viewWillAppear

所以如果你没有使用这两种方法中的一种,那就去做吧。如果你已经是,那么设置单元格的字体就像获取单元格并设置其字体一样简单。如果您使用的是标准UITableViewCell,则使用

cell.font = newFont;

如果您正在使用自定义子类,我显然无法确切地告诉您它是如何工作的,但Nikolai的方式是正确的。