Представление UIViewController после локального уведомления - PullRequest
2 голосов
/ 16 мая 2011

В application:didFinishLaunchingWithOptions: Я инициализирую UINavigationController. Позже я добавляю UINavigationController в окно:

[self.window addSubview:navigationController.view]

Это все отлично работает. Теперь я добавил локальные уведомления в свое приложение, и когда пользователь отвечает на одно, я хотел бы представить UIViewController. Поэтому я подумал, что могу переопределить application:didReceiveLocalNotification:, и там использовать мой navigationController:

[navigationController pushViewController:someVC animated:YES];

Однако , это не работает. Я провел некоторую отладку и заметил, что хотя navigationController не nil, navigationController.view не имеет суперпредставления, поэтому я предполагаю, что оно не отображается.

Итак, мой вопрос: куда я должен нажать мой UIViewController, чтобы он отображался?

Ответы [ 2 ]

5 голосов
/ 16 мая 2011

В вашем AppDelegate.h добавьте это:

//Under where you have <UIKit/UIKit.h>
extern NSString *localReceived;

В вашем AppDelegate.m добавьте это:

//All the way on top where you import your viewControllers
NSString *localReceived = @"localReceived";

В вашем AppDelegate.m в методе - (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)localNotification; добавьте это:

        [[NSNotificationCenter defaultCenter] postNotificationName:localReceived object:self];

Убедитесь, что ваш viewController является навигационным контроллером

Если это не так, выполните следующие действия. - Добавьте этот фрагмент кода в - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:

    UINavigationController *nvcontrol = [[UINavigationController alloc] initWithRootViewController:viewController];

[window addSubview:nvcontrol.view];
[window makeKeyAndVisible];

Теперь - в вашем viewController.m добавьте это в функцию -viewDidLoad

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(localAction) name:localReceived object:nil];

Создайте - (void) localAction и в этом методе добавьте свой код navigationController для отправки на следующий View Controller!

Надеюсь, что это работает для вас. Работает как шарм для меня

2 голосов
/ 19 февраля 2013

Так что вот оно, другое решение с другим подходом.Это сработало как обаяние для меня.проверить это:

- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)localNotification{
    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    CustomViewController *cvc = (CustomViewController *)[storyboard instantiateViewControllerWithIdentifier:@"CustomVC"];
    AnotherViewController *avc = (AnotherViewController *)[storyboard instantiateViewControllerWithIdentifier:@"AnotherVC"];
    avc.someValue = @"Passing a value"; //Optional
    UINavigationController *nav = (UINavigationController *) self.window.rootViewController;
    nav.viewControllers = [NSArray arrayWithObjects:cvc,avc, nil];
    [(UINavigationController *)self.window.rootViewController popToViewController:avc animated:TRUE];
    [[UIApplication sharedApplication] cancelLocalNotification:localNotification]; 
    //Cancel Just for not showing it anymore on the notifications list...
}
...