Set UITabBarItem title programmatically?

拈花ヽ惹草 提交于 2019-12-22 05:23:17

问题


My app is based on a tab bar architecture. In order to have an easy internationalisation mechanic, I do not write any string in XIB files. viewdidload permits to change programmaticaly the strings in the views.

When my app launches, I can see the 4 tabs. But in fact only the first one loads its view controller. The others wait for user click to be loaded. Tabs title can be changed using [self setTitle:@"Mouhahaha"]; in viewDidLoad of loaded view controller.

If I want to keep my internationalisation mechanic available, I do not set in my XIB the name of tabbar items. But, as at start all tab' view controllers are not loaded, I have blank titles for some tabs. The right title is set only when the user click on the tab.

I am looking for a way to set this title programaticaly for each tabbaritem. Do you have hints ?

Thanks a lot.

kheraud


回答1:


All you need to do is make an instance of UITabBarController, then alloc any views you want in it, then set the UITabBarController views. Make sure that your TabBarController is the one that is visible. Also make sure that any viewControllers you want in your tab bar are being imported with #import.

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

Put this in the viewDidLoad method of the first controller allocated.

Alternatively you could just change the way your ApplicationDelegate sets up the TabBarController, but i won't go into that.

Hope this helps




回答2:


my preferred method of doing this programmatically together with the storyboard is to make a subclass of UITabBarController, have my tab bar controller scene in my storyboard use the new subclass (with 3 UIViewController relationships from the tab bar controller to the desired view controller in the case below), and then override 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);
}


来源:https://stackoverflow.com/questions/6361010/set-uitabbaritem-title-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!