UIViewController 是所有控制器的基类。
UINavigationController, UITabBarController 都属于“容器控制器” container viewcontroller 。苹果用它们封装了所有被包含控制器之间的转场的实现。如UINavigationController 我们称它为“导航控制器”,使用push, pop 操作可以实现视图之间的转场。uitabbarcontroller,我们可以通过点击底部的tabbar来实现视图间的切换。至于你说的为什么在viewcontroller 中,可以通过self.navigationcontroller 来访问到控制器所在的导航控制器。那是因为有时候VIEW之间的关系可能变得非常复杂,所以UIVIEWCONTROLLER类里就定义了tabBarController 和navigationController,如果他的parentViewContoller是tabbar或者navigationbar的话,自动就会产生关联.

解决方案 »

  1.   

    哦, 谢谢回复。我的问题是:比如我定义了一个类,继承自UIViewController, 为什么我在这个类中可以调用 UINavigationController的成员变量.我看UIViewController中没有定义navigationcontroller这个成员变量。
      

  2.   

    当然没有了,因为这是UINavigationController的一个类别:@interface UIViewController (UINavigationControllerItem)
    是对UIViewController的拓展,也就是说UIViewController并没有保存UINavigationController的属性,是你每次self. navigationcontroller的时候实时计算出来的,实现类似于这样:- (UINavigationController *)navigationController {
        // ...
        return ...;
    }如果你的UIViewController不在UINavigationController的viewControllers数组里,访问navigationController就是nil,UITabBarController也同理