根据选中的标签更改导航栏标题?

9

我有一个iOS应用程序,其中导航控制器作为根控制器,但在某个部分中,有一个选项卡栏来选择一个导航栏中的视图。它看起来类似于iTunes应用程序(顶部导航栏,底部选项卡栏)。我希望我的导航栏标题根据所选选项卡而改变。我为每个选项卡拥有两个单独的控制器文件。到目前为止,以下是我尝试在每个文件中使用的方法,但都没有成功:

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

如何根据所选标签来更改导航栏标题?

6个回答

19

你可以更改当前正在显示的视图控制器中的导航栏标题。

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

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

对于B、C等情况同样适用。


当我尝试使用这个方法时,它会将控制器连接的选项卡的标题设置为“A”。 - TestinginProd
同样的问题。它将选项卡栏标题设置为A,而不是导航栏标题。如果您重新阅读我的问题,我写道我已经尝试过这3种方法。 - TestinginProd
奇怪。我也很好奇。如果我发现更多信息,我会修改我的答案。 - The Kraken
实际上,最后一个起作用了。给你点赞和勾选。谢谢。 - TestinginProd
没问题。我现在明白了问题所在。很高兴问题得到了解决。 - The Kraken
无论哪个标题最后被设置,都会保留下来。除了viewDidLoad之外,我是否有其他地方可以放置它,以便每次切换选项卡时重新加载标题? - TestinginProd

3
在您的选项卡中的ViewControllers中:
-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tabBarController.title = self.title;
}

2
如果由选项卡栏控制器呈现的各个视图控制器具有自己的导航栏,则

[self setTitle:@"Foo"];

这将设置选项卡栏标签和导航栏标题。

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

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

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

或者,您可以在UITabBarControllerDelegate方法的didSelectViewController中进行导航栏标题调整。

如果这不能解决问题,您可能需要澄清您的问题,并描述控制器的层次结构(例如,选项卡栏控制器是否在导航栏内部还是反之亦然)。


1
你可以继承UITabBarController,将代理设置为自身,并使用代理在选择视图控制器时设置其标题:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    //change the title based on viewController that is selected
    self.title = @"New title";
}

就我个人而言,我更喜欢这种方法。 - Lapinou

1

只需要两行代码...唯一需要注意的是,你需要使用 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传递给上级。 UINavigationController显示属于其topViewController的navigationItem,即UITabBarController。 UITabBarController在其选项卡中显示navigationItem标题。因此,您需要确保tabBarController的navigationItem是其selectedViewController的navigationItem

所以简要概括一下:

UINavigationController标题= topViewController.navigationItem.title

UITabBarController选项卡标题= selectedViewController.navigationItem.title

UIViewController标题= navigationItem.title


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接