navigationController.navigationItem vs navigationItem

时间:2013-06-04 08:43:19

标签: ios uinavigationcontroller uinavigationitem

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

何时使用self.navigationController.navigationItem

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

2 个答案:

答案 0 :(得分:27)

班级UIViewController有一个属性navigationItem

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

当由UINavigationController呈现时,导航控制器将创建此属性,因此每个视图控制器都会获得自己的navigationItem。如果您没有从导航控制器中显示它,那么navigationItem就是零。

现在,使用UINavigationController,您很可能将其用作初始视图控制器。因此,导航控制器不会被另一个导航控制器显示,并且其navigationItem属性为零。

导航栏略有不同,因为这是相反的。

答案 1 :(得分:0)

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