Как я могу отобразить модальное представление в ответ на уведомление в виде нового окна? (нет родителя vc)

У меня много проблем с обработкой входящих локальных уведомлений. Мое приложение использует раскадровки и имеет tabbarcontroller в качестве rootviewcontroller. В настоящее время я запускаю модальные представления из didReceiveLocalNotification следующим образом:

MedicationReminderViewController *vc = [[MedicationReminderViewController alloc] initWithNibName:@"MedicationReminderViewController" bundle:nil];
    vc.notificationInfo = [[NSDictionary alloc] initWithDictionary:notification.userInfo];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:vc];
    navController.navigationBar.barStyle = UIBarStyleBlackOpaque;
    navController.title = @"title";

    UITabBarController *tc = (UITabBarController *)self.window.rootViewController;
    UINavigationController *nc = (UINavigationController *)tc.selectedViewController;    
    [[nc visibleViewController] presentModalViewController:navController animated:YES];

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


person Pieter    schedule 03.05.2012    source источник


Ответы (1)


Сделайте это в своем AppDelegate на объекте window. Я верю, что вы могли бы сделать это там. С самого начала я считаю, что это window.rootViewController. Хотя не уверен.

Как это сделать: когда вы получите UILocalNotification, вы можете получить его в AppDelegate. Когда уведомление «поступит», используйте presentModalViewController на self.window.rootViewController.

обновление
Из документ:

Если приложение находится на первом месте и видно, когда система доставляет уведомление, предупреждение не отображается, значок не помечается и звук не воспроизводится. Однако application:didReceiveLocalNotification: вызывается, если делегат приложения реализует его. Экземпляр UILocalNotification передается в этот метод, и делегат может проверить его свойства или получить доступ к любым пользовательским данным из словаря userInfo.

Используйте application:didReceiveLocalNotification:. Я надеюсь, что ответил на ваш вопрос.

person Paul Peelen    schedule 03.05.2012
comment
Как это сделать, вот мой вопрос :) - person Pieter; 03.05.2012