Как узнать, когда вид UIViewController отображается после того, как в фоновом режиме? - PullRequest
6 голосов
/ 14 декабря 2010

В iOS4.2 / iPhone4

  • Нажмите значок, чтобы запустить приложение (некоторые вид отображается вид контроллеров)
  • Нажмите кнопку «Домой на iPhone» (возврат к домашний экран)
  • двойной клик по кнопке Home
  • Выберите ранее запущенное приложение из выбор

Теперь я вижу, что мой делегат приложения получает сообщение «applicationDidBecomeActive», когда его выбирают после последнего шага, но как узнает мой viewController (тот, чье представление отображается в данный момент)?

viewDidLoad уже был вызван, так что он больше не вызывается. viewWillLoad больше не вызывается.

Не могу понять это. Причина, по которой я спрашиваю, заключается в том, что я хочу проверить, были ли внесены какие-либо изменения в настройки, но хотел бы сделать это в контроллере представления, потому что это главное.

Ответы [ 3 ]

12 голосов
/ 02 мая 2011

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

Используйте NSNotificationCenter, чтобы получать уведомления о UIApplicationDidBecomeActiveNotification событиях вКонтроллер вашего вида.

5 голосов
/ 14 декабря 2010

в вашем приложенииDelegate applicationDidBecomeActive поместите это:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    UINavigationController *navc = (UINavigationController *)[tabBarController selectedViewController];

    UIViewController *topvc = [navc topViewController];

    if ([topvc respondsToSelector:@selector(viewControllerDidBecomeActive)]) 
    {
        [topvc performSelector:@selector(viewControllerDidBecomeActive)];
    }
}

Получает viewController, который виден на экране. Вам просто нужно реализовать viewControllerDidBecomeActive на каждом viewControllers;)

0 голосов
/ 15 декабря 2010

В appDelegate applicationDidBecomeActive установите булеву метку свойства, которая только что появилась из фона.

Затем в вашем viewcontroller, особенно в переопределении viewDidAppear, проверьте свойство appDelegate, если оно истинно, то вы знаете, что оно пришло из фона, в противном случае оно просто выглядело как нормальное. Кстати, затем установите логическое свойство в false для аккуратности.

Edit- Вам придется вызывать viewDidAppear вручную в applicationDidBecomeActive, если вы не воссоздаете свой стек навигации. Если вы смогли получить указатель на текущий видимый контроллер представления, то вызов viewDidAppear должен быть беспроблемным, так как у всех контроллеров представления есть этот метод. Вам не понадобятся делегаты и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...