NavigationController.navigationItem vs navigationItem
Просто любопытно, почему настройка self.navigationItem = ...
работает, но self.navigationController.navigationItem
выходит из строя? То же самое относится к self.toolbarItems
vs self.navigationController.toobarItems
.
Когда использовать self.navigationController.navigationItem
?
Может быть, вы скажете, они указывают на разные вещи. но почему self.navigationController.navigationBarHidden = YES
панель навигации скрыта. не означает ли это, что self.navigationController.navigationItem
указывает на нужную полосу?
Ответы
Ответ 1
Класс UIViewController
имеет свойство navigationItem
.
Это справедливо и для всех подклассов, будь то UICollectionViewController
, UITableViewController
, UINavigationViewController
или любой пользовательский подкласс.
При представлении UINavigationController
навигационный контроллер создаст это свойство, и поэтому каждый контроллер представления получит свой собственный navigationItem
. Если вы не представите его с контроллера навигации, то параметр navigationItem равен нулю.
Теперь, используя UINavigationController
, вы, скорее всего, используете это как свой первый контроллер представления. Поэтому навигационный контроллер НЕ отображается другим навигационным контроллером, а его свойство navigationItem
равно нулю.
Панель навигации немного отличается, так как это управляется наоборот.
Ответ 2
хотя set может установить это свойство навигационного контроллера: self.navigationController.navigationItem = ..
, но это не сработает.
В основном потому, что navigationItem является свойством UIViewController. Вы можете получить доступ к свойству, потому что UINavigationController унаследован от UIViewController. это свойство предназначено для любого контроллера вида, который добавляется в контроллер навигации, чтобы создать для них панель навигации. Обычно UINavigationController не будет помещен в другой контроллер навигации, поэтому установить это свойство навигационного контроллера обычно не имеет смысла.