navigationController属性在UINavigationController.h中声明,但是UIViewController的属性

时间:2013-12-13 17:40:18

标签: ios iphone objective-c

我是Ios开发的新手,我正在关注大书呆子书来学习它。我对“navigationController”感到困惑。 例如,在我的类中,UITableViewController的实例(同样适用于UIViewController的任何子类)我有这个:

[[self navigationController]
     pushViewController:detailViewController
     animated:YES];

当我查看Apple文档时,此navigationController似乎是UIViewController的属性,但据说它在UINavigationController.h中声明! 我打开了UIviewcontroler.h并且没有navigationController的属性或方法,但正如文档所说它确实在UINavigationController.h

根本没有意义。首先我知道子类继承了父类的属性和方法,但UITableViewControler绝不是UINavigationController的子类,而是UiViewController的子类。所以希望有人理解我的要求。当我不从UINavigationController继承时,我如何能够访问此属性?以及文档如何将其显示为UiViewController的属性?

3 个答案:

答案 0 :(得分:2)

UINavigationController.h包含一个声明navigationController属性的UIViewController类。

请记住,文件名只是惯例 - 它们实际上对语言没有任何意义。文件中的代码是重要的。仅仅因为某些代码在UINavigationController.h中并不意味着它在UINavigationController类中。 “属于”一个类的头文件完全可以在其他类上声明类别,以帮助它们与标题所关注的类进行交互。

答案 1 :(得分:1)

当您使用UINavigationController时,它会自动将其自身设置在每个UIVIewController的navigationController属性中。由于UITableViewController继承自UIVIewcController,它也将具有该属性。

Apple documentation:寻找navigationController。你应该看到这个:

@property(nonatomic, readonly, retain) UINavigationController *navigationController

它位于“获取其他相关视图控制器”

答案 2 :(得分:0)

导航控制器对象使用导航堆栈管理当前显示的屏幕。在该堆栈的底部是根视图控制器,在堆栈的顶部是当前正在显示的视图控制器。因为UINavigationController类继承自UIViewController类,所以导航控制器具有可通过view属性访问的自己的视图。部署导航界面时,必须将此视图安装为要创建的任何视图层次结构的根。因此UITableViewController继承自UIViewController,因此可以访问UINavigationController属性。参考 https://developer.apple.com/library/iOS/documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html