で
おかげでだから私はあなたには、いくつかのあなたの問題を解決するためのコードが、あまりないを採用しなければならないと思います。私はこれをテストするテストプロジェクトを構築し、コードと共に画像を添付します。 まず、あなたが正しく理解したら、navigationControllerに問題の新しいストーリーボードをプッシュします。添付の画像を参照してください。
私はストーリーボードをプッシュしているという名前を付けました。それから、私のストーリーボードではプッシュという名前のセットアップがあります。
tabbarcontrollerの最初のビューコントローラでは、以下のコードを追加しました。明らかに、これは私たちをここに押し込んだナビゲーションコントローラを隠しています。コントローラ番号2を訪れたら、新しいナビゲーションコントローラとアイテムが表示されます。 tabbarcontrollerビューコントローラ1でナビゲーションコントローラを隠している場合は、何をしたいのではありません。読み続けて。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
//or to unhide from returning the opposite ->self.parent?.navigationController?.isNavigationBarHidden = true
self.parent?.navigationController?.isNavigationBarHidden = true
}
あなたが最初のビューコントローラにナビゲーションコントローラを非表示にしたくなかったが、コントローラ2を訪問するとき、あなたのアイテムを表示したい場合は、あなたのviewWillAppearにこれを追加し、viewWillAppearで最初のコントローラ内からコードを変更真に偽に。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Do any additional setup after loading the view, typically from a nib.
self.parent?.navigationController?.isNavigationBarHidden = true
}
これは、親ナビゲーションコントローラを、基本的にはあなたのナビゲーションコントローラを覆っていたものとして隠しています。上記のように親ナビゲーションコントローラは隠れています。これはまた、モーダルでプレゼンテーションが行われた理由です。あなたのナビゲーションコントローラは最初から隠されていました。お役に立てれば。
**編集 ナビゲーションコントローラをタブ2のビューコントローラにしたいが、バックボタンで戻ることができるようにタブ1の親を保つ場合は、代わりにviewWillAppearで設定することができますビューコントローラ1でこれのようにしてください。
//tabcontroller vc 1
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.isNavigationBarHidden = false
}
そして、バーの項目を持つタブコントローラビューコントローラ2ではこれを行うことができます。 // tabbarcontroller vc 2 with own navigationcontroller override func viewWillAppear(_アニメーション:Bool){ super.viewWillAppear(animated) self.parent?.navigationController ?.isNavigationBarHidden = }
最後にあなたが両方のコントローラに表示戻るボタンをしたいが、異なる右ボタンがviewWillAppear
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.navigationItem.setRightBarButton(UIBarButtonItem(barButtonSystemItem: .edit, target: self, action: #selector(FirstViewController.editSomthing)), animated: true)
}
でプログラムそれをしたい場合はtrue、あなたは他のコントローラでそれを削除したい場合は
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.navigationItem.rightBarButtonItem = nil;
}
上記の両方の例では、親ナビゲーションコントローラを保持しているため、タブコントローラのビューコントローラをuinavigati内に埋め込む必要はありませんオンコントローラ。
viewWillAppearの親/非表示の親ナビゲーションコントローラも同様にしたい場合は、上記のコードのコンボを使用することもできます。これは、現在および将来選択するビュー階層に依存します。
ニースですが、親ナビゲーションバーに戻るボタンも隠しています。だから、この解決策には何かがありません:) – gbread
もっと自由を許すように答えを更新しました。アプリケーションのオーバーヘッドを減らすために、さまざまな組み合わせを使用する必要があり、ストーリーボードの変更が必要または必要になる可能性があります。 – agibson007
あなたはこれに戻り、正しいテストとマーキングをしてくれたことを感謝します。多分私はなぜ多くの質問に答えることなく3年間行ったのだろう。 :) – agibson007