【问题标题】:iPhone viewDidAppear stops firing after loading/dismissing a modal viewiPhone viewDidAppear 在加载/关闭模式视图后停止触发
【发布时间】:2009-08-03 17:54:29
【问题描述】:

我开始对这个有点疯狂。

我有一个 iphone 应用程序,它的视图结构有些复杂,它是一个选项卡式应用程序,每个选项卡上都有一个视图控制器或导航控制器。

一个选项卡的主控制器使用 viewDidAppear 回调来重新加载自上次显示以来已修改的任何数据,这在大多数情况下表现良好。我遇到的问题是,当我使用标准导航控制器推送/弹出机制在子视图中导航(在同一选项卡中)时,当我导航回主视图时,主视图上的 viewWillAppear 和 viewDidAppear 总是会触发。 但是,如果我加载模式视图控制器然后将其关闭,viewWillAppear 会继续触发,但 viewDidAppear 会停止触发。

我几乎可以肯定这与在模态控制器上手动调用这些回调的需要有关,但我找不到有关如何正确执行此操作的参考信息。 (我只在硬件上看到这个 viewDidAppear 错误,在模拟器中它可以正常工作)

如果您需要进一步说明,请告诉我并感谢您的任何意见。

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    是的,这就是它的工作原理。你最好改用 viewWillAppear。

    这具有在重绘屏幕之前更新数据的额外优势。

    【讨论】:

    • 我实际上使用 viewWillAppear 进行所有这些类型的操作已经有一段时间了,但是已经将其更改为使用 viewDidAppear,因为通过在视图重新加载后更新数据来显着提高 UI 的响应能力与之前。
    • 这很有趣!到目前为止,在我的应用程序中,他们对使用 viewWillAppear 感觉更敏感,使用 viewDidAppear 让我的应用程序感觉很慢,因为只有在视图滑入后才填充表格。(即,看起来表格需要一段时间才能加载)
    【解决方案2】:

    viewDidLoad 应该用于一次性设置操作:

    • 设置标题
    • 实例化子视图、内容数组
    • 与相关视图的基础架构相关的任何其他内容

    之后,使用 viewWillAppear: 来做任何与刷新数据相关的事情。您不必手动调用任何 viewDid/viewWill 方法——这由 UIView 内部处理。 viewDidLoad 在您关闭模态视图控制器后不会触发,因为很可能视图永远不会卸载。当您导航视图控制器堆栈时,viewDidLoad 会很好地触发,因为新视图需要内存,需要卸载其他视图,然后在它们重新出现时重新加载。

    【讨论】:

    • 问题不在于 viewDidLoad 或一次性设置操作。
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多