web-dev-qa-db-ja.com

NavigationController.navigationItemとnavigationItem

不思議なことに、なぜself.navigationItem = ...の設定は機能するのに、self.navigationController.navigationItemは失敗するのですか?同じことがself.toolbarItemsself.navigationController.toobarItemsにも当てはまります。

いつself.navigationController.navigationItemを使用しますか?

多分あなたは言うでしょう、彼らは異なることを指しています。しかし、なぜself.navigationController.navigationBarHidden = YESナビゲーションバーが非表示になっているのですか。 self.navigationController.navigationItemが欲しかったバーを指しているという意味ではありませんか?

24
limboy

クラスUIViewControllerにはプロパティnavigationItemがあります。

これは、UICollectionViewControllerUITableViewControllerUINavigationViewController、または任意のカスタムサブクラスであるかどうかに関係なく、すべてのサブクラスにも当てはまります。

UINavigationControllerによって提示されると、navコントローラーはこのプロパティを作成するため、各ビューコントローラーは独自のnavigationItemを取得します。ナビゲーションコントローラーから提示しない場合、navigationItemはnilです。

さて、UINavigationControllerを使用すると、これを最初のViewControllerとして使用する可能性が高くなります。したがって、ナビゲーションコントローラーは別のナビゲーションコントローラーによって提示されておらず、そのnavigationItemプロパティはnilです。

これは逆に管理されるため、ナビゲーションバーは少し異なります。

28
Fogmeister

setは、ナビゲーションコントローラーのこのプロパティを設定できますが:self.navigationController.navigationItem = ..しかし、それは機能しません。主な理由は、navigationItemがUIViewControllerのプロパティであるためです。 UINavigationControllerはUIViewControllerから継承されているため、プロパティにアクセスできます。このプロパティは、ナビゲーションコントローラーに追加されたビューコントローラーがナビゲーションバーを作成するためのものです。通常、UINavigationControllerは別のナビゲーションコントローラーに配置されないため、ナビゲーションコントローラーのこのプロパティを設定しても通常は意味がありません。

0
Yonghong Xu