【问题标题】:How to reload a UiView in iOS? [duplicate]如何在 iOS 中重新加载 UiView? [复制]
【发布时间】:2021-01-20 23:52:55
【问题描述】:

我想重新加载 UiView 中的数据。 我经常使用这段代码来重新加载 tableview 中的数据:

tableview.reloadData

有没有办法像tableView一样在uiView中重新加载数据?

【问题讨论】:

  • 一般来说,UIView 没有“数据”,或者它不知道自己有“数据”。如果您认为标签的文本是“数据”,那么要重新加载它,只需重新设置标签的文本即可。
  • @Sweeper 我正在将标签的文本设置为从 json 获取的数据。在这种情况下,如何再次设置标签的文本?
  • label.text = "Some Text"?您可能想先重新获取 json。
  • @Sweeper 我也在做同样的事情,但它没有在第一次运行时设置标签中的数据,但是当我返回后再次访问视图时,数据就存在了。所以我的主要关注的是加载数据以便立即更新

标签: ios swift uiview


【解决方案1】:

我认为您正在从服务器获取 JSON 数据,这是一项异步任务,并且您在服务器响应您之前将数据设置在标签中,这看起来像标签中未填充的数据。服务器回复您后,使用escaping closure 更新标签中的数据。

【讨论】:

    【解决方案2】:

    你可以试试:

    self.tableView.reloadData() 要么 tableView?.reloadData()

    【讨论】:

    • 问题是关于重新加载不是表格视图的视图。
    【解决方案3】:

    我想在这里介绍View Drawing Cycle

    UIView 类使用on-demand drawing model 来呈现内容。当一个视图first 出现在屏幕上时,系统会要求draw its content。系统captures a snapshot of this content 并使用该快照作为视图的视觉表示。如果您从不更改视图的内容,则可能永远不会再次调用视图的绘制代码。对于涉及视图的大多数操作,快照图像是reused。如果您确实更改了内容,则您notify 视图已更改的系统。然后视图重复绘制视图并捕获新结果的快照的过程。

    当您的视图内容发生更改时,您不会直接重绘这些更改。相反,您 invalidate the view 使用 setNeedsDisplaysetNeedsDisplayInRect: 方法。这些方法告诉系统视图的内容发生了变化,下次有机会需要重新绘制。在启动任何绘图操作之前,系统会一直等到当前运行循环结束。此延迟使您有机会一次性使多个视图无效、从层次结构中添加或删除视图、隐藏视图、调整视图大小和重新定位视图。您所做的所有更改都会同时反映。

    如果您为视图更改这些properties,则不必触发setNeedsDisplay()setNeedsDisplay(_:)。如果您在某些情况下确实想这样做,您始终可以通过调用setNeedsDisplay()setNeedsDisplay(_:) 方法来强制重绘视图的内容。

    【讨论】:

      【解决方案4】:

      这取决于。可能显示大量数据的典型“复杂”视图(如UITableViewUIPickerView)使用数据源 协议,允许它们按需获取数据。在这种情况下,您需要通知视图有新的/修改的数据可用,因此调用reloadData。然后,视图将向数据源询问要显示的数据。

      原始视图(如UILabel)只需提供您需要设置/更新的属性(如text),然后视图将重新显示数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-24
        相关资源
        最近更新 更多