【问题标题】:How to refresh UITableViewCell?如何刷新 UITableViewCell?
【发布时间】:2010-10-31 08:22:10
【问题描述】:

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

我已尝试从设置屏幕重新加载数据,但没有奏效。 tableview 是一个 UITableViewController 但 viewWillAppear 一旦设置屏幕消失就不会触发。我尝试将自定义单元格设置为 tableview 的属性,以便可以从设置视图访问它,然后调用 setNeedsDisplay 和 setNeedsLayout。那些也没有用。有什么建议吗?

【问题讨论】:

    标签: iphone cocoa-touch uitableview


    【解决方案1】:

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

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

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

    【讨论】:

    • 我在设置视图中尝试了您的代码,但是一旦表格视图显示,当前单元格仍然没有变化。如果我所做的只是从设置视图中调用 tableview 上的 reloadData,它工作正常。然而,这似乎是一种非常昂贵、过度杀伤的方式。
    【解决方案2】:

    在您的自定义 UITableViewCell 中,调用 [self setNeedsLayout]; 它应该在下一个循环中重新绘制您的单元格。我将它用于异步图像加载,因为我从 Web 中提取图像并且它运行良好。

    【讨论】:

    • 这对我有用,谢谢。我有一些 KVO 正在进行,我真的希望只重新加载一个单元格,所以这很好用。
    【解决方案3】:

    我很好奇,您如何显示设置屏幕? viewWillAppear返回正常情况下应该调用。你用过

    [self presentModelViewController:animated:]
    

    [self.navigationController pushViewController:animated:]
    

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

    因此,如果您不使用这两种方法中的一种,请使用。如果您已经是,那么设置单元格的字体实际上就像获取单元格并设置其字体一样简单。如果您使用的是标准的UITableViewCell,则可以使用

    cell.font = newFont;
    

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

    【讨论】:

    • 我正在使用 presentModalViewController。下面的解决方案效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多