我正在尝试从navigationController
访问UIViewController
,因为某种原因它等于nil
的AppDelegate:
self.mainViewController = [[MainViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.mainViewController];
self.window.rootViewController = self.navigationController;
MainViewController:
MyViewController *myViewController = [[MyViewController alloc] init];
[self.navigationController presentModalViewController:myViewController animated:YES];
有人遇到过这个问题吗?
谢谢!
答案 0 :(得分:1)
您正在执行大部分正确的代码,但并非所有代码都在正确的位置。 你应该用视图控制器初始化UINavController是正确的。 但是,在您发送的代码中,MainViewController的init方法在导航控制器初始化之前完成。
这是因为您确实不应该让MainViewController决定何时展示自己。它应该被外部的东西初始化和呈现 - 在这种情况下是AppDelegate。
的AppDelegate:
MainViewController *mvc = [[MainViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];
self.window.rootViewController = self.navigationController;
如果您需要MainViewController以模态方式呈现内容,则应该在viewWillAppear:或viewDidLoad:中执行此操作,而不是在其init方法中。或者,在MainViewController(showMyModal
)上创建一个app代理可以调用的公共方法。
答案 1 :(得分:0)
UIViewController可能没有UINavigationController 只有在您明确设置时,导航控制器才拥有某些控制器:
[yourNavController setViewControllers: @[ yourViewController1, ... , yourViewControllerN] ];
答案 2 :(得分:0)
创建UINavigationController将viewcontroller分配给它的根目录。
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: myViewController];
[self presentViewController:navController animated:YES completion:nil];