[英]How to get UINavigation controller from Tabbar controller and push a specific view
我正在嘗試實現didReceiveRemoteNotification
方法。 當我收到推送通知時,我想顯示一個特定的視圖。 我的應用程序使用UITabbarController
作為根視圖控制器,並使用UINavigationController
作為其子級:
這是我的appdelegate:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
UINavigationController *navController = (UINavigationController *)[[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2];
NSString * storyboardName = @"others";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"BusinessAccountView"];
[navController pushViewController:vc animated:YES];
[PFPush handlePush:userInfo];
}
不幸的是,該代碼無法正常工作。 如果我將[navController pushViewController:vc animated:YES]
更改為[navController presentViewController:vc animated:YES]
,則可以使用,但是我將丟失導航欄。 有誰知道如何做到這一點?
請遵循本教程(Storyboard教程:創建選項卡欄控制器和Web視圖)。
http://www.appcoda.com/storyboard-tutorial-create-tab-bar-controller-and-web-view/
這是一個逐步解決方案。
setSelectedIndex
或setSelectedViewController
首先選擇該選項卡。 rootViewController
的選定視圖控制器的rootViewController
(您的UINavigationController
)。 樣例代碼:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
UITabBarController* tabController = self.window.rootViewController;
if (tabController.selectedIndex != 2) [tabController setSelectedIndex:2];
UINavigationController *navController = tabController.selectedViewController;
NSString * storyboardName = @"others";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"BusinessAccountView"];
[navController pushViewController:vc animated:YES];
[PFPush handlePush:userInfo];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.