好奇,为什么设置self.navigationItem = ...
有效,但self.navigationController.navigationItem
失败了?这同样适用于self.toolbarItems
vs self.navigationController.toobarItems
。
何时使用self.navigationController.navigationItem
?
也许你会说,他们指的是不同的东西。但为什么self.navigationController.navigationBarHidden = YES
隐藏了导航栏。是不是意味着self.navigationController.navigationItem
指向我想要的酒吧?
答案 0 :(得分:27)
班级UIViewController
有一个属性navigationItem
。
对于所有子类也是如此,无论它是UICollectionViewController
,UITableViewController
,UINavigationViewController
还是任何自定义子类。
当由UINavigationController
呈现时,导航控制器将创建此属性,因此每个视图控制器都会获得自己的navigationItem
。如果您没有从导航控制器中显示它,那么navigationItem就是零。
现在,使用UINavigationController
,您很可能将其用作初始视图控制器。因此,导航控制器不会被另一个导航控制器显示,并且其navigationItem
属性为零。
导航栏略有不同,因为这是相反的。
答案 1 :(得分:0)
虽然set可以设置导航控制器的这个属性:self.navigationController.navigationItem = ..
但它不会起作用。
主要是因为navigationItem是UIViewController的属性。您可以访问该属性,因为UINavigationController继承自UIViewController。此属性适用于添加到导航控制器中的任何视图控制器,以便为其创建导航栏。通常情况下,UINavigationController不会被放入另一个导航控制器中,因此设置导航控制器的这个属性通常是没有意义的。