Свифт
Краткий ответ
Используйте NotificationCenter
наблюдателя вместо viewWillAppear
.
override func viewDidLoad() {
super.viewDidLoad()
// set observer for UIApplication.willEnterForegroundNotification
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
// my selector that was defined above
@objc func willEnterForeground() {
// do stuff
}
Длинный ответ
Чтобы узнать, когда приложение возвращается из фона, используйте NotificationCenter
наблюдатель, а не viewWillAppear
.Вот пример проекта, который показывает, какие события происходят когда.(Это адаптация этого ответа Objective C .)
import UIKit
class ViewController: UIViewController {
// MARK: - Overrides
override func viewDidLoad() {
super.viewDidLoad()
print("view did load")
// add notification observers
NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
override func viewWillAppear(_ animated: Bool) {
print("view will appear")
}
override func viewDidAppear(_ animated: Bool) {
print("view did appear")
}
// MARK: - Notification oberserver methods
@objc func didBecomeActive() {
print("did become active")
}
@objc func willEnterForeground() {
print("will enter foreground")
}
}
При первом запуске приложения порядок вывода будет следующим:
view did load
view will appear
did become active
view did appear
После нажатияЕсли вы нажмете кнопку «Домой», а затем вернете приложение на передний план, порядок вывода будет таким:
will enter foreground
did become active
Так что, если вы изначально пытались использовать viewWillAppear
, то UIApplication.willEnterForegroundNotification
, вероятно, то, что вам нужно.
Примечание
Начиная с iOS 9 и более поздних вам не нужно удалять наблюдателя. документация гласит:
Если ваше приложение предназначено для iOS 9.0 и более поздних версий или macOS 10.11 и более поздних версий, вам не нужно отменять регистрацию наблюдателя в его методе dealloc
.