2012-04-10 78 views
3

我的应用程序以带有5个选项卡的标签栏控制器开始。在开始时第一个以其名称呈现,但其他四个在我点击它们之前没有名称。然后该名称显示取决于用户拥有哪种语言。 如何在标签栏出现之前设置标签的名称? 我正在使用故事板。有没有一种方法可以通过编程方式在标签栏中设置标题,其余的都是通过storyboard完成的?我在AppDelegate尝试了一些像[FirstViewController setTitle:NSLocalizedString(@"Titel1", nil)]; 但我得到一个错误,没有选择器setTitle的类方法。 谢谢。标签栏项目标题出现之前Storyboard

回答

12

今天我有同样的问题。我也使用故事板。在我的情况下,我用下面的方式。

  1. 我创建了一个新的“Objective-C类”的名称 “MainTabBarViewController”作为“的UITabBarController”的子类。
  2. 在我的“身份检查员”故事板中,我将“自定义类”更改为“MainTabBarViewController”。

  3. 在 “MainTabBarViewController” 方法 “viewDidLoad中的” i加入:

    [[self.viewControllers objectAtIndex:0]的setTitle:NSLocalizedString(@ “家”,零)];

    [[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

嗨,那里...我喜欢这个主意,你说得对,它完美的作品......非常感谢。 – halloway4b 2012-05-21 19:17:14

+0

我不敢相信!我一直在寻找这个解决方案这么久。非常感谢你:) – thedp 2013-10-14 00:36:13

+0

请参阅下面的解决方案,它不需要使用索引设置标题。 – 2014-03-23 17:29:44

1

在应用程序的委托,要在其中创建视图控制器,在这里(而不是viewDidLoad)设置标题属性,例如:

vc1 = [[VC1 alloc] init]; 
vc1.title = @"List"; 

vc2 = [[VC2 alloc] init]; 
vc2.title = @"Map"; 

tabBarController.viewControllers = [[NSArray alloc] initWithObjects:vc1, vc2, nil]; 
+0

我正在使用故事板。所以我在故事板中创建了它们。故事板中是否有另外一种方法来做到这一点? – halloway4b 2012-04-10 12:43:15

+0

我不知道,因为我不使用故事板。 – 2012-04-10 13:20:17

+0

好的......谢谢.... – halloway4b 2012-04-10 13:44:41

0

如果你看看由Xcode中创建的FirstViewController使用基于在- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil方法模板标签-Bar应用程序,你可以看到这样的事情:

if (self) { 
    //check your language 
    self.title = NSLocalizedString(@"First", @"First"); 
    self.tabBarItem.image = [UIImage imageNamed:@"first"]; 
} 

所以,你必须检查你的语言,然后设置title属性,这将设置次标题栏和导航栏中的标题。

+0

我在Storyboard中有一个Tab Bar View Controller,当它显示时,我希望显示所有标签栏标题,具体取决于用户在iPhone中配置的语言。 – halloway4b 2012-04-10 13:46:22

0

试试这个,在每个视图u必须使用此方法

假设这是你第一个视图

-(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 {} 
+0

这是否与故事板和弧线一起工作? – halloway4b 2012-04-10 13:11:11

+0

我不知道这个故事无聊,但它会在其他项目中挑衅 – freelancer 2012-04-10 13:13:54

2

我有两个选项卡是这样的结构:

MainTabBarController : UITabBarController 
    +- MessagesNavigationController : UINavigationController 
    +- ContactsNavigationController : UINavigationController 

与故事板和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; 
} 

当使用故事板iOS的调用(id)initWithCoder:代替-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil当故事板视图控制在UITabBarController启动期间初始化ler。还要注意,viewDidLoad直到从选项卡中选择视图控制器选项卡才会被调用。