根据选择的选项卡更改导航栏的标题?

时间:2013-05-16 15:44:28

标签: ios uinavigationcontroller uitabbarcontroller title

我有一个iOS应用程序,其中有一个导航控制器作为根控制器,但在一个部分有一个标签栏可以在其中一个导航栏中选择视图。它看起来类似于iTunes应用程序(顶部的导航栏,底部的标签栏)。我希望导航栏的标题根据选择的选项卡进行更改。我为每个选项卡分别有两个控制器文件。以下是我到目前为止尝试使用的内容,无法解决这个问题:

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

如何根据按下哪个标签更改NavBar标题?

6 个答案:

答案 0 :(得分:19)

您在当前正在显示的视图控制器中更改了栏的标题。

例如,在您在选项卡控制器中显示的视图控制器A中,您可以添加:

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

B,C等也一样。

答案 1 :(得分:3)

在选项卡中的ViewControllers中:

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

答案 2 :(得分:2)

如果标签栏控制器显示的各个视图控制器有自己的导航栏,那么

[self setTitle:@"Foo"];

将同时设置标签栏标签以及导航栏标题。

如果导航控制器位于顶层(即标签栏位于导航控制器内),则可能需要手动设置导航栏标题(并且您希望在viewDidAppear中执行此操作而不是viewDidLoad,因为每次切换时都不会重新加载这些子控制器,例如:

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

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

或者,您可以使用UITabBarControllerDelegate方法didSelectViewController进行此导航栏标题调整。

如果不这样做,您可能需要澄清您的问题,描述控制器的层次结构(例如导航栏内的标签栏控制器,反之亦然)。

答案 3 :(得分:1)

您可以对UITabBarController进行子类化,将委托设置为自身,并在选择视图控制器时使用委托设置其标题:

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

答案 4 :(得分:1)

只需两行代码。只需要使用 viewWillAppear 方法

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

PS:灵感来自于上面的答案...

答案 5 :(得分:0)

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

 tabController.navigationItem.title = @"ABC";

这对我有用

来自互联网上的一些R& D

您必须将navigationItem传递给链。 UINavigationController显示属于其topViewController的navigationItem,它是UITabBarController。 UITabBarController在其选项卡中显示navigationItem标题。所以你需要做的就是确保tabBarController的navigationItem是它的selectedViewController  navigationItem

所以回顾一下:

  

UINavigationController title = topViewController.navigationItem.title

     

UITabBarController tabTitle =   selectedViewController.navigationItem.title

     

UIViewController title = navigationItem.title