我是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
的属性?
答案 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