Обработка applicationDidBecomeActive - «Как контроллер представления может реагировать на активизацию приложения?»


179

У меня есть UIApplicationDelegateпротокол в моем основном классе AppDelegate.m, с applicationDidBecomeActiveопределенным методом.

Я хочу вызвать метод, когда приложение возвращается из фона, но метод находится в другом контроллере представления. Как я могу проверить, какой контроллер представления в данный момент отображается в applicationDidBecomeActiveметоде, а затем сделать вызов метода в этом контроллере?

Ответы:


304

Любой класс в вашем приложении может стать «наблюдателем» за различными уведомлениями в приложении. Когда вы создаете (или загружаете) свой контроллер представления, вы хотите зарегистрировать его в качестве наблюдателя для UIApplicationDidBecomeActiveNotificationи указать, какой метод вы хотите вызвать, когда это уведомление будет отправлено вашему приложению.

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

Не забывайте убирать за собой! Не забудьте удалить себя как наблюдателя, когда ваш взгляд исчезает:

[[NSNotificationCenter defaultCenter] removeObserver:self 
                                                name:UIApplicationDidBecomeActiveNotification
                                              object:nil];

Подробнее о Центре уведомлений .


Превосходно. Не думал об использовании NSNotificationCenter. Спасибо!
Кальвин

3
Просто опечатка в этой строке кода (отсутствует 'name'): [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector (someMethod :) name: UIApplicationDidBecomeActiveNotification object: nil];
Джонус

3
Чтобы добавить к ответу Рида, вызываемый метод (в данном примере это someMethod) должен принять параметр NSNotification. Таким образом, сигнатура метода для someMethod будет - (void) someMethod: (NSNotification *) Notification {// Do Some Here Here}
Aaron

2
@ Аарон Может, но это не обязательно. Это отличное понимание, хотя. Спасибо!
Рид Олсен

Фантастика! Какой замечательный способ аннулировать / воссоздать экземпляры NSTimer у каждого, прямо в контроллерах представления / других объектах, которые отвечают за эти NSTimer. Любить это!
idStar
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.