web-dev-qa-db-ja.com

Swiftでナビゲーションバーのタイトルを設定するにはどうすればよいですか?

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 ControllerTab Bar Controllerに接続しました。

enter image description here

だから、これを修正する方法は?問題は、Navigation Barの使用中にTab Barが機能しないことです。

20
Emm

Tab Barは実際にはRoot View ControllerNavigation Bar、タブを切り替えるたびに発生するように、UITabBarController関数で代わりにtitleviewWillAppearを設定する必要があります。

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
}

しかし、それを行うためのより良い方法は、実際にそうすることです

Correct view hierarchy

UINavigationControllerの各子に対してUITabBarControllerを接続する必要があります。これは、セマンティクス上より正確であり、保守が簡単であるためです。

29
kabiroberai

あなたの提示したコードがUIViewController内にあるUINavigationControllerからのものであり、navigationBarが示されている場合は、単純に使用できます:

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "My Title"
}
9
katleta3000

INavigationController Class Reference Appleこれを書いた:

init(rootViewController:UIViewController)
パラメーターrootViewController
ナビゲーションスタックの下部にあるView Controller。このオブジェクトをUITabBarControllerクラスのインスタンスにすることはできません。

ただし、この場合、tabbarControllerのViewControllersはすべて同じタイトル(tabbarControllerのタイトル)を共有しています。

それを行うより良い方法は、tabbarControllerのviewControllersのそれぞれにNavigationViewControllerを与えることです。

1
wj2061