Подтвердить что ты не робот

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 указывает на нужную полосу?

4b9b3361

Ответ 1

Класс UIViewController имеет свойство navigationItem.

Это справедливо и для всех подклассов, будь то UICollectionViewController, UITableViewController, UINavigationViewController или любой пользовательский подкласс.

При представлении UINavigationController навигационный контроллер создаст это свойство, и поэтому каждый контроллер представления получит свой собственный navigationItem. Если вы не представите его с контроллера навигации, то параметр navigationItem равен нулю.

Теперь, используя UINavigationController, вы, скорее всего, используете это как свой первый контроллер представления. Поэтому навигационный контроллер НЕ отображается другим навигационным контроллером, а его свойство navigationItem равно нулю.

Панель навигации немного отличается, так как это управляется наоборот.

Ответ 2

хотя set может установить это свойство навигационного контроллера: self.navigationController.navigationItem = .., но это не сработает. В основном потому, что navigationItem является свойством UIViewController. Вы можете получить доступ к свойству, потому что UINavigationController унаследован от UIViewController. это свойство предназначено для любого контроллера вида, который добавляется в контроллер навигации, чтобы создать для них панель навигации. Обычно UINavigationController не будет помещен в другой контроллер навигации, поэтому установить это свойство навигационного контроллера обычно не имеет смысла.