Обработка applicationDidBecomeActive- " как контроллер представления может реагировать на активизацию приложения?"
у меня есть UIApplicationDelegate
протокол в файле AppDelegate.класса M, с applicationDidBecomeActive
способ определенными.
Я хочу вызвать метод, когда приложение возвращается из фона, но метод находится в другом контроллере представления. Как я могу проверить, какой контроллер вида в настоящее время отображается в applicationDidBecomeActive
метод, а затем вызвать метод в контроллере?
4 ответов
любой класс в вашем приложении может стать "наблюдателем" для различных уведомлений в приложении. Когда вы создаете (или загружаете) свой контроллер вида, вы захотите зарегистрировать его в качестве наблюдателя для UIApplicationDidBecomeActiveNotification
и укажите, какой метод вы хотите вызвать, когда это уведомление будет отправлено в ваше приложение.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(someMethod:)
name:UIApplicationDidBecomeActiveNotification object:nil];
не забудьте убрать за собой! Не забудьте удалить себя в качестве наблюдателя, когда ваш взгляд уходит:
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIApplicationDidBecomeActiveNotification
object:nil];
больше информация о Центр Уведомлений.
Swift 3, 4 Эквивалент:
добавление наблюдателя
NotificationCenter.default.addObserver(self,
selector: #selector(applicationDidBecomeActive),
name: .UIApplicationDidBecomeActive,
object: nil)
удаление наблюдателя
NotificationCenter.default.removeObserver(self,
name: .UIApplicationDidBecomeActive,
object: nil)
обратный звонок
@objc func applicationDidBecomeActive() {
// handle event
}
Swift 2 Эквивалент:
let notificationCenter = NSNotificationCenter.defaultCenter()
// Add observer:
notificationCenter.addObserver(self,
selector:Selector("applicationWillResignActiveNotification"),
name:UIApplicationWillResignActiveNotification,
object:nil)
// Remove observer:
notificationCenter.removeObserver(self,
name:UIApplicationWillResignActiveNotification,
object:nil)
// Remove all observer for all notifications:
notificationCenter.removeObserver(self)
// Callback:
func applicationWillResignActiveNotification() {
// Handle application will resign notification event.
}
С Swift 4 Apple советует с помощью нового предупреждения компилятора, что мы избегаем использования #selector
в этом случае. Ниже приведен гораздо более безопасный способ сделать это:
сначала создайте ленивый var, который может использоваться уведомлением:
lazy var didBecomeActive: (Notification) -> Void = { [weak self] _ in
// Do stuff
}
Если вам требуется включить фактическое уведомление, просто замените _
С notification
.
Далее, мы настроили уведомление, чтобы наблюдать за приложение становится активным.
func setupObserver() {
_ = NotificationCenter.default.addObserver(forName: .UIApplicationDidBecomeActive,
object: nil,
queue:.main,
using: didBecomeActive)
}
большой изменение здесь заключается в том, что вместо вызова #selector
, Теперь мы называем var, созданный выше. Это может устранить ситуации, когда вы получаете недопустимые сбои селектора.
наконец, мы удаляем наблюдателя.
func removeObserver() {
NotificationCenter.default.removeObserver(self, name: .UIApplicationDidBecomeActive, object: nil)
}