我将TabBarController设置为主控制器选项卡,其中名称是使用界面构建器定义的。现在我想以编程方式更改其名称。
怎么可能呢?
答案 0 :(得分:44)
自从我的原始答案以来,发生了很多事:Swift 3,Storyboards等。标题通常是所有视图共享的标题,并且可以在属性检查器中设置
此外,为了进行更多控制,您始终可以从设计器视图中拖动UITabBarItem
和UINavigationItem
元素。您必须将它们拖动到将在标签栏/导航控制器中显示的视图中。基本上他们将信息存储为“我想在这样的标签栏中显示”。
Hello Scene正在添加一个TabBarItem,因此可以对其进行配置。
这两个元素的行为与通过代码访问视图控制器的.tabBarItem
和.navigationItem
属性完全相同。如果这些属性是相应对象的子元素(nav具有navItem,tab具有tabItem),则这些属性始终存在于代码中,您无需在storyboard / xib中添加它们以获取它们。
最后这件事有点令人困惑,因为在storyboard / xib中,你似乎将它们添加到视图控制器中,但事实上你只是说“笔尖也会配置这些属性”。
标签栏上显示的名称来自UIViewController
的{{1}}属性,
title
您可以随时更改标题,并且应该更新标签栏项目上显示的文字。但请注意,尽快执行此操作,理想情况下,使用self.title = @"Name me!";
方法(或init
或initWithNibName:bundle:
)。
这里的关键是,一旦标签栏出现在屏幕上,就会调用init方法,因为它会初始化它的所有视图控制器。如果您要在initWithCoder:
上执行此操作,那么只有在您实际选择了标签,然后是其他系列的来电时才会调用viewDidLoad
,awakeFromNib
,{{1}等等。
在viewWillAppear:
上拥有标题的想法是保持一致。如果在viewDidAppear:
上显示viewController,顶部的导航栏应该使用title属性,就像使用back时一样。 UIViewController
也尊重相同的标题属性并相应地更改。
就可重用性而言,您应该只从UINavigationController
子类的内部设置标题。
使用笔尖或故事板?如果您有UITabBarController
,则可以在属性检查器中直接为其命名(或⌥ ⌘ 4 )< / p>
不幸的是,如果文件所有者是UIViewController
子类,那么你将无法以这种方式访问它,只是因为,XCode将文件所有者注册为“外部对象”,而不是显示一个配置面板。 :(
但有时候,你只想让它们命名不同
UIViewController
每个UIViewController应该处理自己的名字,如果你想从外面强制它(因此,完全违反了我所说的关于可重用性的原始内容)会怎样?
UIViewController
您也可以使用导航项目,但这需要更多的体操比我舒服。
答案 1 :(得分:31)
但是可以在代码中执行此操作,最好直接在 Storyboard 中设置它。怎么样?
只需点按相应的标签栏项控制器内( NOT INSIDE TABBAR CONTROLLER )。
然后在实用程序面板上切换到attribute inspector
。
现在你可以改变一切: - )
答案 2 :(得分:3)
Swift 4 +
tabBarController?.tabBar.items![1].title = "xx"
答案 3 :(得分:2)
在 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;
}
答案 4 :(得分:1)
这是您可以更改标签栏图标的名称和图像的方法:
self.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Main Tab" image:[UIImage imageNamed:@"maintab.png"]] autorelease];
答案 5 :(得分:1)
您可能希望在UITabBarController :: viewDidLoad中执行此操作,在这种情况下,您需要设置视图控制器的标题,因为标签栏项目当前为0。 所以使用
[[self.viewControllers objectAtIndex:0] setTitle: @"Buga"];
[[self.viewControllers objectAtIndex:1] setTitle: @"Nuga"];
答案 6 :(得分:-1)