【问题标题】:viewWillAppear not called after press home button then launch again按主页按钮然后再次启动后未调用 viewWillAppear
【发布时间】:2023-03-30 21:25:02
【问题描述】:

我制作了一个测试应用并在设备上运行它。在第一次发布时,一切正常。然后我按主页按钮退出,然后按应用程序图标。这次似乎没有调用 viewWillAppear 。在我的理解中,每次视图出现在屏幕上时都会调用 viewWillAppear,无论它是由关闭视图控制器触发还是通过按下主页按钮然后重新启动。

【问题讨论】:

  • 我也遇到了同样的问题。你有什么进一步的吗?首次启动时一切正常,但即使在终止应用程序之后,任何后续启动都会导致各种错误,例如 viewWillAppear:未触发,以及我的 UINavigationController 委托方法未触发。我很担心……
  • @horseshoe7,看看这个stackoverflow.com/questions/5277940/…
  • 谢谢,但这不是问题所在。这似乎是 UINavigationController 的问题 - 在应用程序的任何后续启动中,它停止转发 viewWillAppear: 和 viewDidAppear: 到其堆栈中的相关控制器,更令人担忧的是,即使这个对象有一个定义的委托,也没有委托方法也可以触发。

标签: ios


【解决方案1】:

在你的 viewDidLoad() 方法中添加这个

  [[NSNotificationCenter defaultCenter]addObserver:self
                                        selector:@selector(onResume)
                                            name:UIApplicationDidBecomeActiveNotification
                                          object:nil];

并在 onResume 方法中执行应用程序再次激活时需要运行的代码。

【讨论】:

  • 这是正确的做法。在某处使用观察者比向 AppDelegate 添加代码要干净得多。干得好!
【解决方案2】:

根据文档:

在接收者的视图即将添加之前调用该方法 到视图层次结构并在配置任何动画之前 显示视图。您可以覆盖此方法以执行自定义任务 与显示视图相关联。例如,您可以使用这个 将状态栏的方向或样式更改为的方法 与正在呈现的视图的方向或样式相协调。 如果你重写了这个方法,你必须在你的某个地方调用 super 实施。

要获得通知,当您的申请恢复时,您应该使用:
- (void)applicationDidBecomeActive:(UIApplication *)application 此方法在您的 AppDelegate.m 中实现

【讨论】:

  • 所以我应该将viewWillAppear中的代码复制到applicationDidBecomeActive?这对我来说似乎不是正确的方式..
  • 不,但你可以从applicationDidBecomeActive调用任何你想要的方法。
  • 是否建议我在appDelegate的applicationDidBecomeActive中调用控制器的viewWillAppear?
  • 在该 UIViewController 的子类中创建恢复您的活动的方法,然后简单地调用该方法。
【解决方案3】:

这是 Swift 的语法:

NotificationCenter.default.addObserver(self,
                                       selector: #selector(YourViewController.onResume),
                                       name: Notification.Name.UIApplicationDidBecomeActive, 
                                       object: nil)

专业提示:与任何观察者一样,您需要确保订阅(如上所示),并在不再需要通知时取消订阅,如下所示:

NotificationCenter.default.removeObserver(self)

在我的情况下,订阅viewWillAppear 并取消订阅viewWillDisappear 是有意义的,但这完全取决于您应用的需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-23
    • 2021-09-10
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多