以编程方式设置UITabBarItem标题?

时间:2011-06-15 16:25:48

标签: ios uitabbarcontroller uitabbar viewdidload uitabbaritem

我的应用基于标签栏架构。为了拥有一个简单的国际化机制,我不在XIB文件中写任何字符串。 viewdidload允许以编程方式更改视图中的字符串。

当我的应用启动时,我可以看到4个标签。但事实上只有第一个加载其视图控制器。其他人等待用户点击加载。 可以使用[self setTitle:@“Mouhahaha”]更改标签标题;在加载视图控制器的viewDidLoad中。

如果我想保持我的国际化机制,我不会在我的XIB中设置tabbar项的名称。但是,在开始时所有选项卡的视图控制器都没有加载,我有一些标签的空白标题。仅当用户单击选项卡时才设置右侧标题。

我正在寻找一种方法来为每个tabbaritem设置这个标题。你有提示吗?

非常感谢。

kheraud

2 个答案:

答案 0 :(得分:3)

我首选的方法是与故事板一起以编程方式创建UITabBarController的子类,让我的故事板中的标签栏控制器场景使用新的子类(具有3个UIViewController关系选项卡栏控制器到下面的案例中所需的视图控制器),然后覆盖viewWillAppear:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSArray* titleKeys = [NSArray arrayWithObjects:@"top places", 
                                                   @"localizablekey1",
                                                   @"localizablekey2",
                                                   @"localizablekey3",
                                                   nil];
    [super viewWillAppear:animated];
    int count = 0; for (UIViewController* viewController in self.viewControllers)
        viewController.tabBarItem.title = NSLocalizedString([titleKeys objectAtIndex:count++], nil);
}

答案 1 :(得分:1)

您需要做的就是创建一个UITabBarController实例,然后在其中分配您想要的任何视图,然后设置UITabBarController视图。确保您的TabBarController是可见的。还要确保使用#import导入标签栏中所需的任何viewControllers。

UITabBarController *c = [self tabBarController];
SecondViewController *s = [[SecondViewController alloc] init];
[s setTitle:@"Whatever"];
c.viewControllers = [NSArray arrayWithObjects:self, s, nil];
[s release];

将它放在分配的第一个控制器的viewDidLoad方法中。

或者你可以改变你的ApplicationDelegate设置TabBarController的方式,但我不会进入那个。

希望这有帮助