27

只是好奇,为什么设置self.navigationItem = ...有效,但self.navigationController.navigationItem失败了?这同样适用于self.toolbarItemsvs self.navigationController.toobarItems

何时使用self.navigationController.navigationItem

也许你会说,它们指向不同的东西。但是为什么self.navigationController.navigationBarHidden = YES导航栏是隐藏的。这不是self.navigationController.navigationItem指向我想要的酒吧吗?

4

2 回答 2

33

该类UIViewController有一个属性navigationItem

对于所有子类也是如此,无论它是UICollectionViewController、还是任何自定义子类。UITableViewControllerUINavigationViewController

当由UINavigationController导航控制器呈现时,将创建此属性,因此每个视图控制器都有自己的navigationItem. 如果您不从导航控制器中显示它,则 navigationItem 为零。

现在,UINavigationController您很可能使用它作为您的初始视图控制器。因此,导航控制器没有被另一个导航控制器呈现,并且它的navigationItem属性为 nil。

导航栏略有不同,因为这是以相反的方式管理的。

于 2013-06-04T08:48:39.430 回答
0

虽然 set 可以设置导航控制器的这个属性:self.navigationController.navigationItem = ..但它不起作用。主要是因为 navigationItem 是 UIViewController 的属性。您可以访问该属性,因为 UINavigationController 继承自 UIViewController。此属性适用于添加到导航控制器中的任何视图控制器,以便为它们创建导航栏。通常一个 UINavigationController 不会被放入另一个导航控制器,所以设置导航控制器的这个属性通常是没有意义的。

于 2017-06-04T05:03:01.217 回答