ios: доступ к контроллеру навигации из приложения-делегата
У меня есть приложение, которое получает push-уведомления. В didReceiveRemoteNotifications я хотел бы, чтобы приложение показывало определенный контроллер представления в контроллере навигации приложения (который является корневым контроллером представления). Каков наилучший способ сделать это? Можно ли получить ссылку на контроллер навигации в приложении-делегате?
РЕДАКТИРОВАТЬ: Вот код, который я пытаюсь использовать прямо сейчас. Кажется, он использует правильный контроллер навигации, но он вообще не отображает контроллер представления, только пустой экран:
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];
Вот что я вижу:
2 ответа
Если ваш навигационный контроллер является корневым контроллером представления окна, то вы можете просто использовать
(UINavigationController *)self.window.rootViewController
из приложения делегат для доступа к тому, который вы создали в раскадровке.
Я использую что-то вроде ниже, это работает для меня, попробуйте изменить для вашего использования
Stoaryboard
это название вашей раскадровки, когда вы получаете уведомление, вы можете позвонить своему rootview LoginViewController
Убедитесь, что ваш viewcontroller в конструкторе интерфейсов установлен на 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];
}