SwiftでNavigation Bar
のタイトルを設定しようとしていますが、Tab Bar
を設定し、Navigation Bar
で何も表示されていません。ボタンもタイトルもありません。いくつかのコードを使用しましたが、Tab Bar
を使用している間は機能しません。Tab Bar
を削除すると、コードは機能し、Navigation Bar
で問題ありません。
タイトルに使用したコードは次のとおりです。
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = "My Title"
}
そして、Main.storyboard
で、図のようにNavigation Controller
をTab Bar Controller
に接続しました。
だから、これを修正する方法は?問題は、Navigation Bar
の使用中にTab Bar
が機能しないことです。
Tab Bar
は実際にはRoot View Controller
のNavigation Bar
、タブを切り替えるたびに発生するように、UITabBarController
関数で代わりにtitle
のviewWillAppear
を設定する必要があります。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.navigationItem.title = "My Title"
self.tabBarController?.navigationItem.leftBarButtonItem = settingsButton //This is the IBOutlet variable that you previously added
}
しかし、それを行うためのより良い方法は、実際にそうすることです
UINavigationController
の各子に対してUITabBarController
を接続する必要があります。これは、セマンティクス上より正確であり、保守が簡単であるためです。
あなたの提示したコードがUIViewController
内にあるUINavigationController
からのものであり、navigationBar
が示されている場合は、単純に使用できます:
override func viewDidLoad() {
super.viewDidLoad()
self.title = "My Title"
}
INavigationController Class Reference Appleこれを書いた:
init(rootViewController:UIViewController)
パラメーターrootViewController
ナビゲーションスタックの下部にあるView Controller。このオブジェクトをUITabBarControllerクラスのインスタンスにすることはできません。
ただし、この場合、tabbarControllerのViewControllersはすべて同じタイトル(tabbarControllerのタイトル)を共有しています。
それを行うより良い方法は、tabbarControllerのviewControllersのそれぞれにNavigationViewControllerを与えることです。