以编程方式设置UITabBarItem的标题?

6
我的应用程序基于选项卡栏架构。为了拥有简单的国际化机制,我不会在XIB文件中编写任何字符串。viewdidload允许在视图中以编程方式更改字符串。
当我的应用程序启动时,我可以看到4个选项卡。但实际上只有第一个加载其视图控制器。其他选项卡等待用户单击才能加载。 可以使用[self setTitle:@"Mouhahaha"]; 在加载的视图控制器的viewDidLoad中更改选项卡标题。
如果我想保持我的国际化机制可用,我不会在XIB中设置选项卡条目的名称。但是,由于开始时并未加载所有选项卡的视图控制器,因此某些选项卡的标题为空。仅当用户单击选项卡时才设置正确的标题。
我正在寻找一种方法来为每个选项卡条目以编程方式设置该标题。你有什么提示吗?
非常感谢。
kheraud
2个回答

3

我喜欢使用编程方式和storyboard一起完成这个任务的方法是创建一个UITabBarController子类,在storyboard中使用新的子类作为我的选项卡控制器场景(在下面的情况下,有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
你所需要做的就是创建一个UITabBarController实例,然后分配任何你想要的视图到其中,最后设置UITabBarController的视图。确保你的TabBarController是可见的,并且任何你想要在选项卡栏中显示的视图控制器都已经通过#import导入。
UITabBarController *c = [self tabBarController];
SecondViewController *s = [[SecondViewController alloc] init];
[s setTitle:@"Whatever"];
c.viewControllers = [NSArray arrayWithObjects:self, s, nil];
[s release];

将此代码放入分配的第一个控制器的viewDidLoad方法中。
或者,您可以更改ApplicationDelegate设置TabBarController的方式,但我不会深入讨论这个问题。
希望这有所帮助。

它可行,但仅更改一些标签就变得非常复杂...我猜想苹果不希望我们访问tabbaritem。 - kheraud
相比于他们做的其他事情,这个简直就是小菜一碟 :-) - Chance Hudson
如果使用的是 NavigationViewController 而不是 ViewController,会怎样呢? - tryKuldeepTanwar
我明白了:[navigation1 setTitle:@"Nav 1"]; - tryKuldeepTanwar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接