2013-05-16 4 views
9

私はルートコントローラとしてナビゲーションコントローラがあるiOSアプリケーションを持っていますが、ある部分ではナビゲーションバーの1つのビューの中から選択するためのタブバーがあります。これはiTunesアプリ(上のナビゲーションバー、下のタブバー)に似ています。どのタブが選択されているかに基づいてナビゲーションバーのタイトルを変更したい。私は各タブの2つの別々のコントローラファイルを持っています。ここで私は無駄にこの問題を解決するために、これまでそれぞれで使用しようとしたものです:私が押されたタブに基づいてナビゲーションバーのタイトルを変更するにはどうすればよいどのタブが選択されているかに基づいてナビバーのタイトルを変更しますか?

self.navigationItem.title = @"Title"; 
self.navigationController.navigationItem.title = @"title"; 
[self.navigationController setTitle:@"Live"];  
[self setTitle:@"Top Title"]; 

答えて

18

のタイトルは、現在表示されているビューコントローラに変更されています。

したがって、たとえば、あなたはタブコントローラに見せているとの見方コントローラAに、あなたが追加される場合があります:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:YES]; 
    [self setTitle:@"A"]; 
    self.tabBarController.navigationItem.title = @"A"; 
} 

同じことがあなたのViewControllersでなどB、C、のために

+0

このメソッドを試してみると、コントローラーが接続されているタブのタイトルが「A」に設定されています – DCIndieDev

+0

私の改訂版の回答を参照してください。 –

+0

再度、同じ問題。ナビゲーションバーのタイトルではなくタブバーのタイトルをAに設定します。あなたが私の質問を読んだら、私はこれらの3つの方法を試みたと書いています。 – DCIndieDev

3

を行きますタブにあります。

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.tabBarController.title = self.title; 
} 
2

タブバーコントローラが提示する個々のビューコントローラは、独自のナビゲーションバーを持っている場合は、

[self setTitle:@"Foo"]; 

は、タブバーのラベルとナビゲーションバーのタイトルの両方を設定します。

ナビゲーションコントローラが最上位にある場合(つまり、タブバーがナビゲーションコントローラ内にある場合)、手動でナビゲーションバーのタイトルを設定する必要があります(ではなくviewDidAppearに設定する必要があります)これらの子のコントローラーを使用して、切り替えるたびに)、例えば再読み込みされないため、:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [self.navigationController.navigationBar.topItem setTitle:@"Foo"]; 
} 

また、あなたはあなたのUITabBarControllerDelegate方法didSelectViewControllerで、このナビゲーションバーのタイトルの調整を行うことができます。

これで解決できない場合は、コントローラーの階層を説明する質問を明確にする必要があります(ナビゲーションバー内のタブバーコントローラーまたはその逆など)。

1

あなたは、UITabBarControllerをサブクラス自身にデリゲートを設定し、ビューコントローラが選択されている場合、そのタイトルを設定するために、デリゲートを使用することができます。Code..Only物の

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    //change the title based on viewController that is selected 
    self.title = @"New title"; 
} 
+0

個人的には、私はこの種のアプローチが好きです。 – Lapinou

1

わずか2行は、あなたですviewWillAppearメソッドを使用する必要が

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.tabBarController.navigationItem.title = @"Your Title"; 
} 

PS:上記の回答からインスピレーションを受け...

0
UITabBarController *tabController = (UITabBarController *)self.parentViewController; 

tabController.navigationItem.title = @"ABC"; 

これは、あなたがチェーンまでnavigationItemを渡す必要がインターネット

上のいくつかのR & Dから私

のために働いています。 UINavigationControllerは、UITabBarControllerであるtopViewControllerに属するnavigationItemを表示します。 UITabBarControllerは、そのタブにnavigationItemのタイトルを表示します。

UINavigationControllerタイトル= topViewController.navigationItem.title

UITabBarController tabTitle = selectedViewController:だから、あなたは何をする必要があるかtabBarControllerのnavigationItemは、それが要約するのでselectedViewControllerのnavigationItem

だであることを確認しています.navigationItem.title

UIViewController title = navigationItem.title