навигационный контроллер.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 ответа:
Класс
UIViewController
обладает свойствомnavigationItem
.Это справедливо и для всех подклассов, будь то
UICollectionViewController
,UITableViewController
,UINavigationViewController
или любой пользовательский подкласс.При представлении
UINavigationController
навигационный контроллер создает это свойство, и поэтому каждый контроллер вида получает свой собственныйnavigationItem
. Если вы не представляете его от навигационного контроллера, то navigationItem равен нулю.Теперь, с
UINavigationController
вы, скорее всего, используете его в качестве начального контроллера вида. Следовательно, навигация контроллер не представлен другим навигационным контроллером, и его свойствоnavigationItem
равно нулю.Панель навигации немного отличается, так как она управляется наоборот.
Хотя set может задать это свойство навигационного контроллера:
self.navigationController.navigationItem = ..
, но оно не будет работать. Главным образом потому, что navigationItem является свойством UIViewController. Вы можете получить доступ к этому свойству, так как UINavigationController наследуется от UIViewController. это свойство предназначено для любого контроллера вида, который добавляется в навигационный контроллер, чтобы иметь панель навигации, созданную для них. Обычно UINavigationController не помещается в другой навигационный контроллер, поэтому установите это свойство навигационный контроллер обычно не имеет смысла.