我的应用程序以一个标签栏控制器开始,它有 5 个标签。开始时第一个显示其名称,但其他四个没有名称,直到我单击它们。然后根据用户使用的语言显示名称。如何在标签栏出现之前设置标签的名称?我正在使用故事板。当所有其余部分都用故事板完成时,有没有办法以编程方式在标签栏设置标题?我在 AppDelegate 中尝试过类似[FirstViewController setTitle:NSLocalizedString(@"Titel1", nil)];
但我收到一个错误,即选择器 setTitle 没有类方法。谢谢。
5 回答
我今天遇到了同样的问题。我也在使用故事板。就我而言,我使用了以下方式。
- 我创建了一个名为“MainTabBarViewController”的新“Objective-C 类”作为“UITabBarController”的子类。
在“身份检查器”的故事板中,我将“自定义类”更改为“MainTabBarViewController”。
在“MainTabBarViewController”的方法“viewDidLoad”中,我添加了:
[[self.viewControllers objectAtIndex:0] setTitle:NSLocalizedString(@"home", nil)];
[[self.viewControllers objectAtIndex:1] setTitle:NSLocalizedString(@"statistics", nil)];
[[self.viewControllers objectAtIndex:2] setTitle:NSLocalizedString(@"settings", nil)];
[[self.viewControllers objectAtIndex:3] setTitle:NSLocalizedString(@"info", nil)];
我想这不是完美的方式,但对我来说它很完美。
我有一个带有两个这样的选项卡的配置:
MainTabBarController : UITabBarController
+- MessagesNavigationController : UINavigationController
+- ContactsNavigationController : UINavigationController
在使用 Storyboard 和 ARC 的配置中,我覆盖了initWithCoder:
我的 UITabBarController 视图控制器(在这种情况下)的自定义类中的选择器,ContactsNavigationController
并像这样初始化tabBarItem.title
那里:
@implementation ContactsNavigationController
...
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super initWithCoder:decoder];
if (self) {
self.tabBarItem.title = NSLocalizedString(@"Contacts", nil);
}
return self;
}
当使用故事板时,iOS 调用(id)initWithCoder:
而不是-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
在 UITabBarController 启动期间初始化故事板视图控制器时。另请注意,viewDidLoad
在从选项卡栏中选择视图控制器选项卡之前不会调用它。
在您正在创建视图控制器的应用程序委托中,在此处(而不是在 中viewDidLoad
)设置 title 属性,例如:
vc1 = [[VC1 alloc] init];
vc1.title = @"List";
vc2 = [[VC2 alloc] init];
vc2.title = @"Map";
tabBarController.viewControllers = [[NSArray alloc] initWithObjects:vc1, vc2, nil];
如果您查看 Xcode 使用基于该- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
方法的模板 Tab-Bar 应用程序创建的 FirstViewController,您会看到如下内容:
if (self) {
//check your language
self.title = NSLocalizedString(@"First", @"First");
self.tabBarItem.image = [UIImage imageNamed:@"first"];
}
所以你必须检查你的语言,然后设置title
属性,这将在标签栏和导航栏中设置标题。
试试这个,在每个视图中你都必须使用这个方法
假设这是您第一次查看
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = NSLocalizedString(@"homepage", @"homepage");
[self.tabBarItem setTag:0];
self.tabBarItem.image = [UIImage imageNamed:@"homepage"];
}
return self;
}
在您的应用程序委托类中编写此代码以添加UITabBarController
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2,viewController3,viewController4,viewController5, nil];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
将上面的代码添加到
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {}