不思議なことに、なぜself.navigationItem = ...
の設定は機能するのに、self.navigationController.navigationItem
は失敗するのですか?同じことがself.toolbarItems
とself.navigationController.toobarItems
にも当てはまります。
いつself.navigationController.navigationItem
を使用しますか?
多分あなたは言うでしょう、彼らは異なることを指しています。しかし、なぜself.navigationController.navigationBarHidden = YES
ナビゲーションバーが非表示になっているのですか。 self.navigationController.navigationItem
が欲しかったバーを指しているという意味ではありませんか?
クラスUIViewController
にはプロパティnavigationItem
があります。
これは、UICollectionViewController
、UITableViewController
、UINavigationViewController
、または任意のカスタムサブクラスであるかどうかに関係なく、すべてのサブクラスにも当てはまります。
UINavigationController
によって提示されると、navコントローラーはこのプロパティを作成するため、各ビューコントローラーは独自のnavigationItem
を取得します。ナビゲーションコントローラーから提示しない場合、navigationItemはnilです。
さて、UINavigationController
を使用すると、これを最初のViewControllerとして使用する可能性が高くなります。したがって、ナビゲーションコントローラーは別のナビゲーションコントローラーによって提示されておらず、そのnavigationItem
プロパティはnilです。
これは逆に管理されるため、ナビゲーションバーは少し異なります。
setは、ナビゲーションコントローラーのこのプロパティを設定できますが:self.navigationController.navigationItem = ..
しかし、それは機能しません。主な理由は、navigationItemがUIViewControllerのプロパティであるためです。 UINavigationControllerはUIViewControllerから継承されているため、プロパティにアクセスできます。このプロパティは、ナビゲーションコントローラーに追加されたビューコントローラーがナビゲーションバーを作成するためのものです。通常、UINavigationControllerは別のナビゲーションコントローラーに配置されないため、ナビゲーションコントローラーのこのプロパティを設定しても通常は意味がありません。