私はView Controllerのタイトルを次のように設定しています。
self.title = @"my title";
これに先立ち、埋め込みのView ControllerとNavigation Controllerのストーリーボードにタイトルを設定しました。「タイトル」に設定しました。
View Controllerを保持しているタブをクリックすると、Tab Bar Itemのタイトルとuiviewcontroller
が次のように変更されます。
View Controllerを変更したいのですが、Tab Barアイテムはタイトルのままにします:Title
どうすればこれを達成できますか?
ナビゲーションバーのタイトルは変更したいが、タブバーのタイトルは変更したくないようです。これでうまくいくはずです。
[self.navigationItem setTitle:@"my title"];
迅速:
self.navigationItem.title = "My Title"
だからまだ手に入らない人(私のように)
self.navigationItem.title = @"my title";
設定ナビゲーションバータイトル。
self.tabBarItem.title = @"my title";
設定タブバータイトル。
self.title = @"my title";
セットこれらの両方。
トップバーのタイトルを設定
self.navigationController?.navigationBar.topItem?.title = "top title"
タブ項目のタイトルを設定する
self.tabBarController?.tabBar.items?[0].title = "tab title"
両方のタイトルを設定する
self.title = "both titles"
ために Swift これを使って、
self.navigationItem.title = "Navigation bar title"
self.title = "Tab bar title"
注:各View ControllerのルートにNavigation Controllerを備えたTab Bar Controllerがある場合、View ControllerでTab Barアイテムを設定しても、navigationItem.title
を設定している場合はタイトルに影響しません。代わりにTab Bar Controllerからピックアップするために、Navigation ControllerにtabBarItem
を設定する必要があります。
私のTab BarのView ControllerはすべてルートにNavigation Controllerを持っているため、他の人が投稿した答えは私には役に立たなかった-これはUITabBarController
の一般的な階層パターンです。代わりにNavigation ControllerのtabBarItem
を設定して、navigationItem
のタイトルとは異なるタイトルを表示する必要があります。
tabBarItem
を作成して、VCに直接関連付けることができます。
let tabBarVCOne = BooksListViewController()
tabBarVCOne.tabBarItem = UITabBarItem(title: "Books", image: nil, tag: 0)
tabBarViewControllers.append(tabBarVCOne)
...
次に、このようなものがあります:
//Wrap each view controller in a navigation controller.
self.viewControllers = tabBarViewControllers.map(UINavigationController.init)
ただし、View Controllerから既に関連付けられているtabBarItem
を取得し、それをNavigation Controllerに自動的に設定するには、次のように変更する必要があります。
self.viewControllers = tabBarViewControllers.map({
let navigationController = UINavigationController(rootViewController: $0)
navigationController.tabBarItem = $0.tabBarItem
return navigationController
})
これで、tabBarItem
に定義されたタイトルとは別のタイトル(VCから設定)を使用できるようになります。
では、UIViewControllerの拡張機能を作成しました。
import UIKit
extension UIViewController {
/// Setting the navigation title and tab bar title
///
/// - Parameters:
/// - navigationTitle: Navigation title
/// - tabBarTitle: TabBar title
func setTitles(navigationTitle: String, tabBarTitle: String) {
// Order is important here!
title = tabBarTitle
navigationItem.title = navigationTitle
}
}
そして、コントローラーから:
override func viewDidLoad() {
super.viewDidLoad()
setTitles(navigationTitle: "Login", tabBarTitle: "Home")
}
おそらく少し遅れています(しかし)。
VCのタイトルを設定すると、ナビゲーションおよびtabBarのタイトルが変更されます(VCが両方に既に添付されている場合)。
別々のタイトルが必要な場合は、それらを手動で設定する必要があります。通常はVCのタイトルを設定し、次にtabBarItemのタイトルを設定します。
私はあなたができるView ControllerのviewDidLoad
メソッドを信じています:
self.title = @"my title";
self.tabBarItem.title = @"tab title";
これにはかなり遅れました。 TabBarControllerを、それ自体のUITabBarControllerDelegateおよびUINavigationControllerDelegateおよび各タブに埋め込まれたNavigation Controllerとして機能させることができます。
.h:
@interface YourTabBarController : UITabBarController <UITabBarControllerDelegate, UINavigationControllerDelegate>
@end
.m:
- (void) viewDidLoad {
// UITabBarControllerDelegate
self.delegate = self;
// UINavigationControllerDelegates
yourNavigationController.delegate = self;
...
}
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
yourNavigationController.tabBarItem.title = @"Tab Bar Title";
...
}
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
yourNavigationController.tabBarItem.title = @"Tab Bar Title";
...
}
いくつかの簡単なテストに基づいて、これらの2つのデリゲートアクションは、ゆるいケースをカバーし、タブを切り替えているか、Navigation Controllerをブラウズしているかに関係なくタイトルを更新するようです。完全を期すために、 didShowViewController でタイトルを更新することもできますが、私が見たことに基づいて、それは必要ではないと思います。