我有一个带有自定义UITableViewCell的UITableView。在cellForRowAtIndexPath中,我为每个单元格中的标签指定一种字体,因为用户可以随时更改字体大小。要更改字体大小,用户单击tableview下方的按钮,该按钮会使用设置显示另一个视图。一旦他们选择了字体大小并单击完成,该视图就会消失并再次显示tableview。我在每个观看区域显示一个单元格。因此,用户在滚动到下一个单元格之前看不到字体更改。当前的单元格是我想要更新的单元格。
我在设置屏幕上尝试过reloadData但是没有用。 tableview是一个UITableViewController,但是一旦设置屏幕消失,viewWillAppear就不会触发。我已经尝试使自定义单元格成为tableview的属性,因此可以从设置视图访问它,然后调用setNeedsDisplay和setNeedsLayout。那些也不起作用。有什么建议吗?
答案 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的方式是正确的。