我有一个像这样设置的视图和控制器。
- 标签/栏控制器
- 1.内是根视图控制器
- 2. 内是一个以编程方式创建的导航控制器,它在根视图控制器中显示为子视图。
我想做的是访问顶部选项卡栏/导航控制器,以便我可以将视图推送到上面。
我尝试了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];
}
嵌套的 ViewController(即,在由实际上位于 NavController 堆栈上的 ViewController 控制的视图内)无法直接访问其父视图的控制器是其堆栈成员的 UINavigationController。这句话虽然拗口,但其含义是:你无法从这里到达那里。
相反,您必须通过应用程序委托访问应用程序的 NavController。
YourAppDelegate *del = (YourAppDelegate *)[UIApplication sharedApplication].delegate;
[del.navigationController pushViewController:nextViewController animated:YES];
您正在使用 UIApplication 的单例(包含有关您的应用程序的各种有用信息),它有一个指向 AppDelegate 的 .delegate 属性,并且包含对 NavigationController 的引用。
无论如何,这就是“基于导航的应用程序”Xcode 模板设置 NavController 所有权的方式。 YMMV,如果你自己推出的话——不过如果你这样做了,你可能就不需要问这个问题了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)