更改uitabbarcontroller中的选项卡名称

我有一个TabBarController设置为主控制器选项卡,其中名称是使用界面生成器定义的。 现在我想以编程方式更改它的名字。

怎么可能呢?

更新为XCode 8

由于我原来的答案,发生了很多事情:Swift 3,Storyboards等。标题通常是所有视图共享的标题,可以在属性检查器中设置

标题设置

而且,对于更多的控制,您可以随时从devise器视图中拖动UITabBarItemUINavigationItem元素。 您必须将它们拖到要在标签栏/导航控制器中显示的视图中。 基本上他们存储的信息是“我想在这样的标签栏中显示”。

在这里输入图像说明

你好场景正在增加一个TabBarItem,所以它可以被configuration。

这两个元素的行为与通过代码访问视图控制器的.tabBarItem.navigationItem属性完全相同。 这些属性总是存在于代码中,如果它们是相应对象的子对象(nav有navItem,tab有tabItem),则不需要在storyboard / xib中添加它们。

最后一件事情有点令人困惑,因为在storyboard / xib中,看起来你将它们添加到视图控制器,但事实上,你只是说“这个笔尖也会configuration这些属性”。

原始答复

出现在标签栏上的名字来自UIViewControllertitle属性,

 self.title = @"Name me!"; 

您可以随时更改标题,并更新显示在标签栏项目上的文字。 但要小心, 尽可能快地执行此操作 ,理想情况下,使用init方法(或initWithNibName:bundle:initWithCoder:

这里的关键在于,只要标签栏出现在屏幕上,init方法就会被调用,因为它初始化所有的视图控制器。 如果你是在viewDidLoad上做的话,那么只有在你真正select标签的时候才会被调用,然后调用其他的系列, awakeFromNibviewWillAppear:viewDidAppear:等等。

UIViewController上有一个标题的想法是保持一致。 如果您在UINavigationController上显示viewController,则顶部的导航栏应该使用title属性,就像使用back时一样。 UITabBarController也尊重相同的标题属性,并相应地改变。

就可重用性而言,您应该仅从UIViewController子类的内部设置标题。

笔尖的方式

使用笔尖或故事板? 如果你有一个UIViewController ,你可以直接在属性检查器(或⌥⌘4 )中给它命名,

使用界面构建器,在属性检查器中

不幸的是,如果文件所有者是UIViewController子类,那么你将无法以这种方式访问​​它,只是因为XCode将文件所有者注册为“外部对象”,并没有为其显示configuration面板。 🙁

多个标题,相同的视图控制器

但有时候,你只是想让他们命名不同

 // Modify the display title on the tab bar self.tabBarItem.title = @"World"; // Modify the display title on the navigation bar self.navigationItem.title = @"Hello World"; 

与邻居拧在一起

每个UIViewController都应该处理自己的名字,如果你想从外部强制执行(因此,完全违反了我所说的关于可重用性的原始内容)?

 // Rename the other guy's .title property [[self.tabBarController.viewControllers objectAtIndex:<#Index#>] setTitle:@"Hello World"]; // Or do as before, and rename the other guy's tab bar [(UITabBarItem*)[self.tabBarController.tabBar.items objectAtIndex:<#index#>] setTitle:@"Hello World"]; 

你也可以做导航项目,但这将需要更多的体操比我舒服。

但是可以在代码中完成,最好直接在Storyboard中设置。 怎么样?

只需点击控制器内部的相应的标签栏项目( 不是内部的标签控制器 )。

在这里输入图像说明

然后切换到“ 实用程序”面板上的attribute inspector

在这里输入图像说明

现在你可以改变一切:-)

在你的viewController.m

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { //Here you are setting title self.title = NSLocalizedString(@"Title", @"Title"); } return self; } 

这是如何更改标签栏图标的名称和图像:

  self.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Main Tab" image:[UIImage imageNamed:@"maintab.png"]] autorelease]; 

你可能想要在UITabBarController :: viewDidLoad中做到这一点,在这种情况下,你需要设置视图控制器的标题,因为标签栏项目当前是0。 所以使用

 [[self.viewControllers objectAtIndex:0] setTitle: @"Buga"]; [[self.viewControllers objectAtIndex:1] setTitle: @"Nuga"]; 

我正在使用Xcode版本8.2.1(8C1002),这适用于我:

在这里输入图像说明