我的观点和控制器设置如此。
我要做的是访问顶部标签栏/导航控制器,以便我可以将视图推到它上面。
我尝试了parentViewController,但它只是将视图推送到编程的导航控制器上。
有什么建议吗?
这就是我设置根视图控制器的方法:
-(void)viewDidAppear:(BOOL)animated{
NSLog(@"ROOT APPEARED");
[super viewDidAppear:animated];
WorklistViewController *worklistController = [[WorklistViewController alloc]initWithNibName:@"WorklistView" bundle:[NSBundle mainBundle]];
UINavigationController *worklistNavController = [[UINavigationController alloc] initWithRootViewController:worklistController];
worklistNavController.navigationBar.barStyle = UIBarStyleBlackOpaque;
worklistNavController.view.frame = watchlistView.frame;
[worklistNavController.topViewController viewDidLoad];
[worklistNavController.topViewController viewWillAppear:YES];
[self.view addSubview:worklistNavController.view];
GetAlertRequestViewController *alertsController = [[GetAlertRequestViewController alloc]initWithNibName:@"AlertsView" bundle:[NSBundle mainBundle]];
UINavigationController *alertsNavController = [[UINavigationController alloc] initWithRootViewController:alertsController];
alertsNavController.navigationBar.barStyle = UIBarStyleBlackOpaque;
alertsNavController.view.frame = alertsView.frame;
[alertsNavController.topViewController viewDidLoad];
[alertsNavController.topViewController viewWillAppear:YES];
[self.view addSubview:alertsNavController.view];
}
答案 0 :(得分:30)
嵌套的ViewController(即,在实际位于NavController堆栈上的ViewController控制的视图内)无法直接访问其父视图的控制器是其堆栈成员的UINavigationController。这是句子中的一个,但它的意义是:你不能从这里到达那里。
相反,您必须通过App委托来获取应用程序的NavController。
YourAppDelegate *del = (YourAppDelegate *)[UIApplication sharedApplication].delegate;
[del.navigationController pushViewController:nextViewController animated:YES];
您正在使用UIApplication的单例(包含有关您的应用程序的各种有用信息),它具有指向AppDelegate的.delegate属性,并且包含对NavigationController的引用。
无论如何,这就是“基于导航的应用程序”Xcode模板如何设置NavController的所有权。 YMMV如果你自己推出 - 虽然如果你这样做,你可能不需要问这个问题。
答案 1 :(得分:10)
您可以使用以下说明:
[(UINavigationController *)self.view.window.rootViewController pushViewController:vc animated:YES];
它对我有用:D
答案 2 :(得分:0)
看看UIViewController的navigationController和tabBarController属性。这些将返回给定UIViewController'所属'的相应navigationController或tabBarController。
所以你可以这样做:
[customController.navigationController pushViewController:newController animated:YES];
// Similarly for tabBarController ...