更改uitabbarcontroller中的选项卡名称
我有一个TabBarController设置为主控制器选项卡,其中名称是使用界面生成器定义的。 现在我想以编程方式更改它的名字。
怎么可能呢?
更新为XCode 8
由于我原来的答案,发生了很多事情:Swift 3,Storyboards等。标题通常是所有视图共享的标题,可以在属性检查器中设置
而且,对于更多的控制,您可以随时从devise器视图中拖动UITabBarItem
和UINavigationItem
元素。 您必须将它们拖到要在标签栏/导航控制器中显示的视图中。 基本上他们存储的信息是“我想在这样的标签栏中显示”。
你好场景正在增加一个TabBarItem,所以它可以被configuration。
这两个元素的行为与通过代码访问视图控制器的.tabBarItem
和.navigationItem
属性完全相同。 这些属性总是存在于代码中,如果它们是相应对象的子对象(nav有navItem,tab有tabItem),则不需要在storyboard / xib中添加它们。
最后一件事情有点令人困惑,因为在storyboard / xib中,看起来你将它们添加到视图控制器,但事实上,你只是说“这个笔尖也会configuration这些属性”。
原始答复
出现在标签栏上的名字来自UIViewController
的title
属性,
self.title = @"Name me!";
您可以随时更改标题,并更新显示在标签栏项目上的文字。 但要小心, 尽可能快地执行此操作 ,理想情况下,使用init
方法(或initWithNibName:bundle:
或initWithCoder:
。
这里的关键在于,只要标签栏出现在屏幕上,init方法就会被调用,因为它初始化所有的视图控制器。 如果你是在viewDidLoad
上做的话,那么只有在你真正select标签的时候才会被调用,然后调用其他的系列, awakeFromNib
, viewWillAppear:
, 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),这适用于我: