【发布时间】:2011-11-07 04:51:54
【问题描述】:
我有一个 TabBarController 设置为主控制器选项卡,其中名称是使用界面生成器定义的。现在我想以编程方式更改其名称。
怎么可能?
【问题讨论】:
标签: ios objective-c iphone cocoa-touch uitabbarcontroller
我有一个 TabBarController 设置为主控制器选项卡,其中名称是使用界面生成器定义的。现在我想以编程方式更改其名称。
怎么可能?
【问题讨论】:
标签: ios objective-c iphone cocoa-touch uitabbarcontroller
Swift 4+
tabBarController?.tabBar.items![1].title = "xx"
【讨论】:
自从我最初回答以来,发生了很多事情:Swift 3、Storyboards 等。标题通常是所有视图共享的,可以在属性检查器中设置
此外,为了获得更多控制,您始终可以从设计器视图中拖动 UITabBarItem 和 UINavigationItem 元素。您必须将它们拖到将在选项卡栏/导航控制器中显示的视图。基本上他们将信息存储为“我想像这样显示在标签栏中”。
Hello Scene 正在添加一个 TabBarItem,因此可以对其进行配置。
这两个元素的行为与通过代码访问视图控制器的.tabBarItem 和.navigationItem 属性完全相同。如果这些属性是相应对象的子对象(nav 具有 navItem,tab 具有 tabItem),则它们始终存在于代码中,您无需将它们添加到 storyboard/xib 中即可拥有它们。
最后这件事有点令人困惑,因为在故事板/xib 中,您似乎正在将它们添加到视图控制器,但实际上您只是在说“笔尖也会配置这些属性”。
标签栏上出现的名字来自UIViewController的title属性,
self.title = @"Name me!";
您可以随时更改标题,它应该会更新出现在标签栏项目上的文本。但要小心,尽快执行此操作,最好在使用中的init 方法(或initWithNibName:bundle:,或initWithCoder:)中。
这里的关键是,一旦标签栏出现在屏幕上,就会调用 init 方法,因为它会初始化其所有视图控制器。如果您要在 viewDidLoad 上执行此操作,则只有在您实际选择选项卡时才会调用它,然后是其他调用系列,awakeFromNib、viewWillAppear:、viewDidAppear: 等也是如此。
在UIViewController 上有一个标题的想法是保持一致。如果你在 UINavigationController 上显示 viewController,顶部的导航栏应该使用 title 属性,就像使用 back 时一样。 UITabBarController 也尊重相同的 title 属性并相应更改。
就可重用性而言,您应该只从UIViewController 子类的内部设置标题。
使用笔尖或情节提要?如果你有UIViewController,你可以在属性检查器中直接给它起名字(或⌥⌘4)
不幸的是,如果文件所有者是UIViewController 子类,那么您将无法通过这种方式访问它,原因很简单,XCode 将文件所有者注册为“外部对象”,并且没有显示它的配置面板。 :(
但有时,您只是想让它们命名不同
// 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"];
你也可以用导航项来做,但这需要比我更舒服的体操。
【讨论】:
self.tabBarItem.title 解决方案对我也不起作用,但另一种解决方案适用:[[self.parentViewController.tabBarController.tabBar.items objectAtIndex:4] setTitle:@"NewTitle"];
但是可以在代码中完成,最好直接在 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;
}
【讨论】:
您可能希望在 UITabBarController::viewDidLoad 中执行此操作,在这种情况下,您需要设置视图控制器的标题,因为此时标签栏项目当前为 0。 所以使用
[[self.viewControllers objectAtIndex:0] setTitle: @"Buga"];
[[self.viewControllers objectAtIndex:1] setTitle: @"Nuga"];
【讨论】:
这是更改标签栏图标名称和图像的方法:
self.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Main Tab" image:[UIImage imageNamed:@"maintab.png"]] autorelease];
【讨论】:
[ autorelease],要么创建一个新的,添加它,然后释放它。