在我的应用程序中,我有一个带有表格视图的导航控制器,当按下按钮时,会打开一个标签控制器。在第一个标签中,我想要设置导航栏的标题。
这是我的故事板的图像,只是为了确保我们彼此不相符。
这是我应该工作的代码。当我尝试打开单个视图而不是选项卡控制器并且它正常工作时,我使用了这段代码。所以我想我必须改变一些事情。
- (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中正常打印出来。
答案 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";
}