在哪里实现applicationWillResignActive(_ :)?

时间:2018-02-13 10:30:21

标签: ios swift lifecycle uiapplicationdelegate uiapplication

为了让ViewController到" 做一些具体的事情 "就在应用程序进入后台状态之前...

我明白这种事情一般是在里面处理的 applicationWillResignActive(_:) 方法,但此方法位于AppDelegate类内,而不是ViewController

这是我第一次在IOS上执行与生命周期相关的内容,因此我不确定是否:

1)从ViewController类内部调用AppDelegate方法。这意味着我必须将方法从私有更改为公共。

2)拥有ViewController implement UIApplicationDelegate

PS - 只要AppDelegate实施ViewController代理,是否可以删除UIApplication类?

编辑:我应该补充一点,这是一个只有一个视图控制器的单页应用程序(好吧,我想它最终会有一个设置视图控制器......但是' ViewController'我指的是永远不会从堆栈中弹出来。)

谢谢!

2 个答案:

答案 0 :(得分:1)

通常你不应该删除AppDelegate,除非你有充分的理由。这不是一个好理由。

对于您的方案,我会调查使用NotificationCenter来观察UIApplicationWillResignActive事件。每次应用程序进入后台时都会触发此事件。

有关详细信息,请参阅:Apple Docs

e.g。

func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated: animated)
    NotificationCenter.default.addObserver(self, selector: #selector(youFunction), name: .UIApplicationWillResignActive, object: nil)
}

func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated: animated)
    NotificationCenter.default.removeObserver(self)
}

答案 1 :(得分:1)

使用NotificationCenter

在YourViewController中

class YourViewController : UIViewController {

override func viewDidAppear(_ animated: Bool) {
       NotificationCenter.default.addObserver(self, selector: #selector(reloadTableData(_:)), name: .UIApplicationWillResignActive, object: nil)
}
override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        NotificationCenter.default.removeObserver(self, name: .UIApplicationWillResignActive, object: nil)
    }
}

func reloadTableData(_ notification: Notification) {
}