web-dev-qa-db-ja.com

タブバー項目のタイトルとは無関係にuiviewcontrollerのタイトルを変更する方法

私はView Controllerのタイトルを次のように設定しています。

self.title = @"my title";

これに先立ち、埋め込みのView ControllerとNavigation Controllerのストーリーボードにタイトルを設定しました。「タイトル」に設定しました。

View Controllerを保持しているタブをクリックすると、Tab Bar Itemのタイトルとuiviewcontrollerが次のように変更されます。

View Controllerを変更したいのですが、Tab Barアイテムはタイトルのままにします:Title

どうすればこれを達成できますか?

90
Atma

ナビゲーションバーのタイトルは変更したいが、タブバーのタイトルは変更したくないようです。これでうまくいくはずです。

[self.navigationItem setTitle:@"my title"];

迅速:

self.navigationItem.title = "My Title"
189
Craig Siemens

だからまだ手に入らない人(私のように)

self.navigationItem.title = @"my title";設定ナビゲーションバータイトル。

self.tabBarItem.title = @"my title";設定タブバータイトル。

self.title = @"my title";セットこれらの両方

152
Simon Epskamp

Swift

トップバーのタイトルを設定

self.navigationController?.navigationBar.topItem?.title = "top title"

タブ項目のタイトルを設定する

self.tabBarController?.tabBar.items?[0].title = "tab title"

両方のタイトルを設定する

self.title = "both titles"
15
Suragch

ために Swift これを使って、

self.navigationItem.title = "Navigation bar title" 
self.title = "Tab bar title"
7
Zaid Pathan

注:各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から設定)を使用できるようになります。

6
Pavan

Swift 4.2

では、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")
}
0
cs4alhaider

おそらく少し遅れています(しかし)。

VCのタイトルを設定すると、ナビゲーションおよびtabBarのタイトルが変更されます(VCが両方に既に添付されている場合)。

別々のタイトルが必要な場合は、それらを手動で設定する必要があります。通常はVCのタイトルを設定し、次にtabBarItemのタイトルを設定します。

0
wolffan

私はあなたができるView ControllerのviewDidLoadメソッドを信じています:

self.title = @"my title";
self.tabBarItem.title = @"tab title";
0
rmaddy

これにはかなり遅れました。 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 でタイトルを更新することもできますが、私が見たことに基づいて、それは必要ではないと思います。

0
Ruiz