【问题标题】:Modify UIViewController after resumed from background before view is showed在显示视图之前从后台恢复后修改 ViewController
【发布时间】:2013-01-16 22:01:35
【问题描述】:

我想在应用程序进入后台后修改我的UIViewController,然后再次回到前面,我想在显示之前修改视图。由于没有调用-viewWillAppear:,我该怎么做?我应该在- application:didBecomeActive 中获取对正在显示的视图控制器的引用然后修改视图吗?重要的是视图在可见时不被修改。

【问题讨论】:

    标签: objective-c cocoa-touch uiviewcontroller


    【解决方案1】:

    您的控制器可以将自己注册为UIApplicationDidBecomeActiveNotification 通知的观察者,以便根据需要做出反应。


    仅凭这一点并不能保证视图可见或不可见。

    UIApplicationDelegate 协议文档声明通知将在 -applicationDidBecomeActive: 被调用后触发。根据触发调用的事件,视图可能已经或可能不可见。例如,如果应用因来电而暂停,则该视图可能会在用户拒绝来电时保持可见,并且在应用再次激活时仍然可见。

    您可能需要跟踪应用在变为非活动状态后是否真正进入后台,以决定在再次变为活动状态时采取什么操作。 UIApplicationWillEnterForegroundNotification 听起来像您正在寻找的通知,但仅此一项并不能告诉您应用程序是否被某些事件中断,或者用户是否通过按下主页按钮暂停了它。您还需要考虑应用可能已暂停、终止然后重新启动的情况。

    需要阅读 iOS 应用程序编程指南中的Managing App State Changes 以了解您希望如何响应不同的可能转换。

    【讨论】:

    • 是的,但是在发送此通知时视图控制器是否已经可见?
    • @PeterWarbo 有时,我试图澄清。不过,这意味着支持什么样的行为?根据应用程序是否(或如何)恢复与控制器是否由于某些应用程序内事件而呈现不同,控制器的行为似乎很奇怪。
    • 感谢您的详尽解释。这样做的原因是用户可以在设置应用程序中翻转几个开关,然后当用户返回应用程序时我需要重绘 UI。由于我无法为 UI 的重绘设置动画,因此它看起来很草率,所以我想在视图可见之前执行此操作。希望可以在 applicationWillEnterForeground 中完成:
    • @PeterWarbo 听起来应该适合你。当您的应用处于非活动状态时,这些设置不应更改,因此检查前景/背景转换应该会让您获得所需的行为。
    猜你喜欢
    • 2023-03-10
    • 2020-04-29
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多