我正在开发一个带有标签栏控制器和推送通知的项目,当我的应用根据警报主体收到推送通知时,它将打开一个嵌入标签栏的确定视图控制器。
我已经可以呈现视图控制器,但我丢失了标签栏。
为了呈现视图控制器,这就是我所做的:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
vc5 *ivc = [storyboard instantiateViewControllerWithIdentifier:@"vc5"];
UINavigationController *navigationController=[[UINavigationController alloc] initWithRootViewController:ivc];
self.window.rootViewController =nil;
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
我尝试使用此代码显示标签栏,但我没有工作:
UITabBarController *tabBarController = [[UITabBarController alloc] initWithNibName:@"tabBarController" bundle:nil];
tabBarController.selectedViewController = [storyboard instantiateViewControllerWithIdentifier:@"tabBarController"];
tabBarController.selectedViewController = nil;
tabBarController.selectedViewController = [tabBarController.viewControllers objectAtIndex:0];
UITabBarController *tabBar = (UITabBarController *)self.window.rootViewController;
[tabBar setSelectedIndex:0];
我的故事板包含一个初始登录ViewController,位于导航控制器内,在用户登录后提示选择一个城市,然后我提供一个标签栏控制器,包含4个标签,我需要通过推送通知位于第一个选项卡中,是导航控制器内的第五个视图。
我在SO中查看其他问题,但没有任何效果,这是我第一次在iOS中开发,任何帮助都将受到高度赞赏。谢谢
编辑: 当我收到通知时,我也尝试从AppDelegate制作一个segue,但是我收到了这个错误
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<TabBarController: 0x16dec150>) has no segue with identifier 'pushNotification'
这是我的推送代码:
TabBarController *tabBar = [[TabBarController alloc] initWithNibName:@"tabBarController" bundle:nil];
[tabBar performSegueWithIdentifier:@"pushNotification" sender:self];
答案 0 :(得分:0)
从初始登录视图控制器执行segue,而不是从app delegate执行。为了使用故事板进行推送segue,您必须在故事板中命名segue和view。您可以通过选择它们并使用xCode右侧的属性面板来命名这些项目。
答案 1 :(得分:0)
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
//Create view controller for Main here
UIViewController * MainNC = [storyboard instantiateViewControllerWithIdentifier:@"HomeNavigationController"];
[self presentViewController:MainNC animated:NO completion:nil];
答案 2 :(得分:-2)
我通过在通知到达时呈现视图控制器并将必要的数据传递给视图控制器
来解决此问题