我的应用程序以标签栏控制器开始,该控制器有5个标签。在开始时,第一个显示其名称,但其他四个没有名称,直到我点击它们。然后根据用户使用的语言显示名称。
如何在标签栏出现之前设置选项卡的名称?
我正在使用故事板。有没有办法在编程栏中以编程方式设置标题,而所有其余的都是用故事板完成的?我在AppDelegate中尝试了类似[FirstViewController setTitle:NSLocalizedString(@"Titel1", nil)];
的内容
但是我得到一个错误,即选择器setTitle没有类方法。
感谢。
答案 0 :(得分:12)
我今天遇到了同样的问题。我也在使用故事板。在我的情况下,我使用以下方式。
在“身份检查员”的故事板中,我将“自定义类”更改为“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)];
我想这不是一种可行的方式,但对我而言,它是完美的。
答案 1 :(得分:3)
我有一个包含两个标签的配置:
MainTabBarController : UITabBarController
+- MessagesNavigationController : UINavigationController
+- ContactsNavigationController : UINavigationController
在使用Storyboard和ARC的配置中,我覆盖了我的UITabBarController视图控制器的自定义类中的initWithCoder:
选择器(在本例中为ContactsNavigationController
)并初始化tabBarItem.title
,如下所示:
@implementation ContactsNavigationController
...
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super initWithCoder:decoder];
if (self) {
self.tabBarItem.title = NSLocalizedString(@"Contacts", nil);
}
return self;
}
在使用故事板时,当在UITabBarController启动期间初始化故事板视图控制器时,iOS会调用(id)initWithCoder:
而不是-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
。另请注意,在从选项卡栏中选择视图控制器选项卡之前,不会调用viewDidLoad
。
答案 2 :(得分:1)
在创建视图控制器的app delegate中,在此处设置title属性(而不是viewDidLoad
),例如:
vc1 = [[VC1 alloc] init];
vc1.title = @"List";
vc2 = [[VC2 alloc] init];
vc2.title = @"Map";
tabBarController.viewControllers = [[NSArray alloc] initWithObjects:vc1, vc2, nil];
答案 3 :(得分:0)
如果您使用基于- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
方法的模板Tab-Bar应用程序查看Xcode创建的FirstViewController,您可以看到如下内容:
if (self) {
//check your language
self.title = NSLocalizedString(@"First", @"First");
self.tabBarItem.image = [UIImage imageNamed:@"first"];
}
因此,您必须检查您的语言,然后设置title
属性,这将在标签栏和导航栏中设置标题。
答案 4 :(得分:0)
试试这个,在每个视图中你都必须使用这个方法
假设这是您第一次观看
-(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 {}