在选项卡栏控制器中设置导航栏的标题

时间:2012-09-08 10:23:41

标签: ios uinavigationcontroller uitabbarcontroller titlebar

在我的应用程序中,我有一个带有表格视图的导航控制器,当按下按钮时,会打开一个标签控制器。在第一个标签中,我想要设置导航栏的标题。

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

enter image description here

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

    - (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中正常打印出来。

9 个答案:

答案 0 :(得分:37)

简单!

[self.tabBarController setTitle:@"Title"];

答案 1 :(得分:15)

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

self.navigationController.visibleViewController.title = ski_center;

答案 2 :(得分:5)

好的,所以你知道,将UITabBarController置于UINavigationController内是非常糟糕的做法 - Apple建议您进行良好的用户界面设计,只需将UINavigationController置于UITabBarController内{ {1}}而不是相反。无论哪种方式,您都应该能够像这样UITabBarController更改标题;

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

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

这应该有效。

答案 3 :(得分:3)

在swift 3中

self.tabBarController?.navigationItem.title = "Your title goes here"

答案 4 :(得分:3)

Swift 4 及更高版本中

self.tabBarController?.title = "Title"

答案 5 :(得分:2)

 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

答案 6 :(得分:1)

试试这个:

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

答案 7 :(得分:1)

基本上我不知道你是否注意到了,但我得到了这样的工作:

我为标签栏控制了一个新课程。

我做了以下事情:

将其添加到 app delegate.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;

答案 8 :(得分:0)

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

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar.topItem?.title = "title";
 }