UIViewController的navigationController是零

时间:2012-11-17 19:41:48

标签: iphone objective-c ios uiviewcontroller uinavigationcontroller

我正在尝试从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];

有人遇到过这个问题吗?

谢谢!

3 个答案:

答案 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];