2013-06-04 2 views
17

ちょうど不思議なことに、self.navigationItem = ...を設定すると、なぜself.navigationController.navigationItemが失敗するのですか? self.toolbarItemsself.navigationController.toobarItemsの場合も同様です。navigationController.navigationItemとnavigationItem

self.navigationController.navigationItemを使用する場合は?

多分あなたは、彼らは異なることを指摘するでしょう。しかし、なぜself.navigationController.navigationBarHidden = YESナビゲーションバーが隠されています。それは私が欲しかったバーへのself.navigationController.navigationItemのポイントを意味しないのですか?

答えて

23

クラスUIViewControllerは、属性がnavigationItemです。

UICollectionViewControllerUITableViewControllerUINavigationViewController、または任意のカスタムサブクラスであっても、これはすべてのサブクラスに当てはまります。

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

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

ナビゲーションバーは、これとは逆の方法で管理されるため、若干異なります。

+0

"navコントローラがこのプロパティを作成するため、各ビューコントローラが独自のnavigationItemを取得する"という意味は、navigationItemプロパティは親によってのみ設定できますか?もしこれが真実なら、 'self.navigationController.navigationItem'は' 'の結果がnilでないのはなぜですか? – limboy

+0

テストの後、 'self.navigationItem'がnilにならないことが判明します.novigationItemが設定されたnavControllerに追加される前に、initの後に原因があります。 – limboy

+0

ああ、申し訳ありません、私の間違い。ナビゲーション項目は現在表示されているコントローラが所有していますが、ナビゲーションコントローラではありません。 – Fogmeister

0

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

関連する問題