16

那么在我的应用程序中,我有一个带有表格视图的导航控制器,当按下按钮时,一个选项卡控制器会打开。在其第一个选项卡中,我希望设置导航栏的标题。

这是我的故事板的图像,只是为了确保我们彼此不了解。

在此处输入图像描述

这是我应该工作的代码。我在尝试打开单个视图而不是选项卡控制器时使用了此代码,并且它工作正常。所以我想我必须改变一些东西。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{       
        SkiCenter *myDetViewCont = [[SkiCenter alloc] initWithNibName:@"SkiCenter" bundle:[NSBundle mainBundle]];
        myDetViewCont.ski_center = [centers objectAtIndex:indexPath.row];
        UIStoryboard * storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
        [[self navigationController] pushViewController:[storyBoard instantiateViewControllerWithIdentifier:@"SkiCenterIds"] animated:YES];
        //[self.navigationController pushViewController:myDetViewCont animated:YES]; // "Pushing the controller on the screen"
        [myDetViewCont release]; // releasing controller from the memory
        myDetViewCont = nil;        
    }

Skicenter我的第一个选项卡的类名称在哪里,并且SkiCenterIds是我的选项卡控制器在情节提要中的标识符。

Skicenter.m 中的代码是:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    self.navigationItem.title = ski_center;        
}

但我没有看到任何标题。那么我做错了什么?我也试过这个:

[self.navigationController setTitle:@"Live"];

或者

self.title=ski_center;

ski_center 具有价值,因为它在 NSLog 中正常打印出来。

4

9 回答 9

39

Simple!

[self.tabBarController setTitle:@"Title"];
于 2013-11-17T10:33:14.097 回答
17

添加到 ghostrider 的解决方案,在 mytabbarcontroller.m self.navigationItem.title 对我不起作用。我有一个 NavigationController,其详细视图是 TabController,这就是我在第一个选项卡实现中所拥有的

self.navigationController.visibleViewController.title = ski_center;
于 2013-06-02T10:20:47.400 回答
8

Swift 4及更高版本中

self.tabBarController?.title = "Title"
于 2018-06-25T09:21:19.970 回答
6

好吧,你知道,把 a 放在 aUITabBarController里面是非常糟糕的做法UINavigationController——Apple 建议你只应该把 aUINavigationController放在里面,UITabBarController而不是反过来。无论哪种方式,您都应该能够UITabBarController像这样更改标题;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    [[self.navigationController.viewControllers objectAtIndex:0] setTitle:ski_center];        
}

那应该行得通。

于 2012-09-08T10:42:35.210 回答
6

在迅速 3

self.tabBarController?.navigationItem.title = "Your title goes here"
于 2017-12-27T06:32:08.017 回答
5

我遇到了这个并找到了一个更简单的解决方案。一个新的解决方案是从登陆视图控制器更改导航栏标题,如下所示

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar.topItem?.title = "title";
 }
于 2019-07-10T16:41:28.753 回答
2
 UITabBarController *tabController = (UITabBarController *)self.parentViewController;

 tabController.navigationItem.title = @"ABC";

这对我有用

来自互联网上的一些研发

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

回顾一下:

UINavigationController 标题 = topViewController.navigationItem.title

UITabBarController tabTitle = selectedViewController.navigationItem.title

UIViewController 标题 = navigationItem.title

于 2016-10-12T07:00:10.547 回答
1

基本上我不知道你是否没有注意到,但我让它像这样工作:

我为标签栏控制器分配了一个新类。

我做了以下事情:

将其添加到应用程序委托.h

@property (nonatomic,retain) NSString *center;

将其添加到mainmap.m

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    delegate.center=[centers objectAtIndex:indexPath.row];

mytabbarcontroller.m中

  AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    ski_center=delegate.center;

    self.navigationItem.title = ski_center;
于 2012-09-09T16:19:14.963 回答
1

尝试这个:

[self.navigationController setTitle:@"Live"];
于 2012-09-08T11:12:03.437 回答