Подтвердить что ты не робот

Ios: доступ к контроллеру навигации из делегата приложения

У меня есть приложение, которое получает push-уведомления. В didReceiveRemoteNotifications я хотел бы, чтобы приложение отображало определенный контроллер представления в контроллере навигации приложения (который, случается, является контроллером корневого представления). Каков наилучший способ сделать это? Могу ли я получить ссылку на контроллер навигации в делегате приложения?

EDIT: Вот код, который я пытаюсь использовать прямо сейчас. Похоже, что используется правильный контроллер навигации, но он вообще не отображает контроллер вида, просто пустой экран:

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
        EventDetailViewController *destCon = [storyboard instantiateViewControllerWithIdentifier:@"EventDetailViewController"];
        destCon.event=notifyEvent;
        UINavigationController *navController =(UINavigationController *) self.window.rootViewController;
        [navController pushViewController:destCon animated:YES];

Вот что я вижу:

enter image description here

4b9b3361

Ответ 1

Если ваш контроллер навигации является контроллером корневого представления окна, вы можете просто использовать

(UINavigationController *)self.window.rootViewController

из делегата приложения для доступа к тому, который вы создали в раскадровке.

Ответ 2

Я использую что-то вроде ниже, это работает для меня, попробуйте изменить для использования

Stoaryboard - это имя вашей раскадровки, когда вы получаете уведомление, вы можете вызвать свой rootview LoginViewController

Убедитесь, что в диспетчере представления в конструкторе интерфейса установлено значение yourControllerName в нижнем примере: LoginView

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{

        //replace and push rootview manually
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
        LoginViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
        UINavigationController *navigationController=[[UINavigationController alloc] initWithRootViewController:ivc];
        self.window.rootViewController =nil;
        self.window.rootViewController = navigationController;
        [self.window makeKeyAndVisible];
}