навигационный контроллер.navigationItem vs navigationItem


Просто любопытно, почему установка self.navigationItem = ... работает, но self.navigationController.navigationItem терпит неудачу? То же самое относится и к self.toolbarItems vs self.navigationController.toobarItems.

Когда использовать self.navigationController.navigationItem?

Может быть, вы скажете, что они указывают на разные вещи. но почему self.navigationController.navigationBarHidden = YES панель навигации скрыта. разве это не означает self.navigationController.navigationItem указать на бар, который я хотел?
2 21

2 ответа:

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

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

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

Теперь, с UINavigationController вы, скорее всего, используете его в качестве начального контроллера вида. Следовательно, навигация контроллер не представлен другим навигационным контроллером, и его свойство navigationItem равно нулю.

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

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