【问题标题】:Change title of navbar based on which tab is selected?根据选择的选项卡更改导航栏的标题?
【发布时间】:2013-05-16 15:44:28
【问题描述】:

我有一个 iOS 应用程序,其中有一个导航控制器作为根控制器,但有一个选项卡栏可以在其中一个导航栏中的视图之间进行选择。它看起来类似于 iTunes 应用程序(顶部的导航栏,底部的标签栏)。我希望导航栏的标题根据选择的选项卡进行更改。每个选项卡都有两个单独的控制器文件。以下是我迄今为止尝试使用的方法来解决此问题,但无济于事:

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

如何根据按下的选项卡更改导航栏标题?

【问题讨论】:

    标签: ios uinavigationcontroller uitabbarcontroller title


    【解决方案1】:

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

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

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

    B、C 等也是如此。

    【讨论】:

    • 当我尝试这种方法时,它将控制器连接到的选项卡的标题设置为“A”
    • 再次,同样的问题。它将标签栏标题设置为 A,而不是导航栏标题。如果你重读我的问题,我写道我已经尝试了这 3 种方法。
    • 奇怪。我也很好奇。如果我发现更多内容,我会修改我的答案。
    • 其实最后一个有效。有一个赞成票和一个复选标记。谢谢
    • 没问题。我现在明白问题所在了。很高兴它成功了。
    【解决方案2】:

    在选项卡中的 ViewControllers 中:

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

    【讨论】:

      【解决方案3】:

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

      [self setTitle:@"Foo"];
      

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

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

      - (void)viewDidAppear:(BOOL)animated
      {
          [super viewDidAppear:animated];
      
          [self.navigationController.navigationBar.topItem setTitle:@"Foo"];
      }
      

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

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

      【讨论】:

        【解决方案4】:

        您可以继承 UITabBarController,将委托设置为自身,并在选择视图控制器时使用委托设置其标题:

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

        【讨论】:

        • 个人比较喜欢这种方式。
        【解决方案5】:

        只需两行代码..唯一的问题是,您需要使用 viewWillAppear 方法

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

        PS:灵感来自上述答案...

        【讨论】:

          【解决方案6】:
           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 tabTitle = selectedViewController.navigationItem.title

          UIViewController 标题 = navigationItem.title

          【讨论】:

            猜你喜欢
            • 2012-12-17
            • 2018-07-19
            • 2020-03-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-10-04
            • 1970-01-01
            相关资源
            最近更新 更多