从UITabBarController子视图推送时,为什么self.navigationController为NULL

时间:2011-08-01 17:56:44

标签: iphone objective-c cocoa-touch debugging uinavigationcontroller

这就是我在做的事情。我有一个tabBarControllerOne,有5个标签。在单击其中一个选项卡时,我提供了一个模态视图控制器,它有一个navigationBar和一个TabBarControllerTwo(带有3个选项卡)。这三个标签是值得关注的问题。

tabBarController的第5个标签中,我将modalViewController显示为

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.nextTabView];
  //  navController.navigationBarHidden = YES;


navController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

NSLog(@"Displauing the navcontroller before pushing %@", navController);

[self presentModalViewController:navController animated:NO];

这里,nextTabView是一个带有3个标签的tabBarController。意见有效。在视图中,如果我尝试类似的东西。

self.navigationController.navigationBarHidden = YES;
[self.navigationController pushViewController: someController animated:YES];


// nothing works.

如果我是NSLog,它会将self.navigationController显示为(null)

有人可以告诉我为什么这不起作用吗?

2 个答案:

答案 0 :(得分:3)

不支持在UITabBarController内嵌入UINavigationController。 Apple有一个仔细的容器视图控制器层次结构,UITabBarController必须是其视图控制器层次结构的根。

此外,正如Joe指出的那样,您的视图不属于导航控制器;它们属于标签栏控制器,因此未设置navigationController属性。

答案 1 :(得分:2)

模态视图控制器不属于UINavigationController堆栈,因此未设置该属性。您将需要使用delegation在选择某些内容时通知创建控制器,然后该控制器可以正确地将下一个控制器推送到堆栈。

UIViewController Reference:

  

讨论
  仅在视图控制器处返回导航控制器   在它的堆栈中。如果是导航控制器,则此属性为零   无法找到。