在语言更改时动态重新加载UIViewControllers

时间:2015-04-07 13:32:58

标签: ios objective-c cocoa-touch uitabbarcontroller uitabbar

用户在应用设置中更改语言首选项后,我正在更改UITabBarItem标题。问题是整个项目在进行此更改后会消失一段时间,然后再次显示新标题。

在AppDelegate中我正在初始化UITabBarController:

self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.delegate = self;

BFNCategoriesTableViewController *shopViewController = [[BFNCategoriesTableViewController alloc] init];
UINavigationController *shopNavigationController = [[UINavigationController alloc] initWithRootViewController:shopViewController];
shopNavigationController.tabBarItem = [[UITabBarItem alloc] initWithTitle:BFNLocalizedString(kTranslationShop) image:[UIImage imageNamed:@"TabBarShopUnselected"] selectedImage:[UIImage imageNamed:@"TabBarShopSelected"]];

self.tabBarController.viewControllers = @[offersNavigationController,
                                         shopNavigationController,
                                         //wishlistNavigationController,
                                         cartNavigationController,
                                         moreNavigationController];

然后在下载翻译后我只是设置了不同的标题:

navigationController.title = BFNLocalizedString(kTranslationCart);

你知道为什么会这样吗?最终如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:0)

首先,我无法理解上面的代码,tabBarController如何与UINavigationController连接。

你应该

self.tabBarController.viewControllers = [NSArray arrayWithObject: shopViewController]; 
UINavigationController *shopNavigationController = [[UINavigationController alloc] initWithRootViewController: self.tabBarController ]; 

UINavigationController没有属性tabBarItem。

之后:

shopViewController.title = = BFNLocalizedString(kTranslationCart);

它更改了一个标题位于navController和tabBar标题之上。

另一种方式,它可以直接更改tabBarTitle。

UITabBar *tabBar = self.tabBarController.tabBar;
UITabBarItem *  itemBar = [ [UITabBarItem alloc] initWithTitle:BFNLocalizedString(kTranslationCart)
                    image:(UIImage *)image // your image
            selectedImage:(UIImage *)selectedImage]; // highlighted image 
[tabBar  setItems:[NSArray arrayWithObject:itemBar
    animated:YES ]; 

我认为第一种方式就足够了它必定会有效。