2014-04-14 68 views
3

我試圖以編程方式更改我的應用程序中的選項卡欄項目的名稱。UITabbarController更改欄項目標題以編程方式

在我故事板我有一個的UITabBarController設置爲初始視圖和層次結構如下:

的UITabBarController - >的UINavigationController - >的UITableViewController - >詳細視圖控制器

要改變您需要更改UINavigationController的條形圖項目的標題。在IB中一切正常,但我需要本地化我的應用程序,這是我動態執行的(無需重新啓動應用程序),每次啓動應用程序時,IB中給出的應用程序標題都會設置,並且標題不會更改爲它們的標題本地化的標題,直到我點擊酒吧項目。

在我各自的UITableViewControllers中,我使用self.title = localized title;來設置標題,效果很好。 但是我希望應用程序在啓動時更改條款項目標題,直到我點擊它們。

我在這裏看過關於這個問題的帖子,並嘗試了這些建議,但仍然將酒吧項目的標題從IB設置爲它們的值。我也嘗試下面的代碼,但只在啓動時設置選中的欄:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Select the desired tab of our initial tab bar controller: 
    UITabBarController *tabBar = (UITabBarController *)self.window.rootViewController; 
    tabBar.selectedIndex = 1; 
    tabBar.navigationController.title = @"Item 2"; 

    [(UITabBarItem*)[self->tabBarController.tabBar.items objectAtIndex:1] setTitle:@"Item 2"]; 

    // Override point for customization after application launch. 
    return YES; 

} 

回答

6

好吧,我正在回答我自己的問題。經過了很長時間的網絡搜索之後,我嘗試了各種各樣的組合。下面的後幫我弄的軌道上,但是它並沒有解決它(仍然給它+1):

Tab Bar Item title before appear Storyboard

在的UITableViewController .m文件,你需要添加此代碼設置的標題在加載或點擊之前的標籤欄項目。

- (id)initWithCoder:(NSCoder *)decoder { 

    self = [super initWithCoder:decoder]; 
    if (self) { 
     self.navigationController.tabBarItem.title = NSLocalizedStringFromTableInBundle(@"TITLE_TABLANGUAGE", nil, currentLanguageBundle, @""); 
    } 
    return self; 
} 

答案就在該的UITabBarController的物品欄得到他們的價值觀,在這種情況下,一個標題,從UINavigationController的酒吧項目稱號。在initWithCoder方法中設置該標題非常重要。把它放在其他地方不會在它被點擊之前設置標題。

3

我認爲你讓它比它需要更困難。要更改標籤欄項目的標題在運行時,簡單地做從維持在問題選項卡中的視圖 - 控制以下內容:

self.navigationController.tabBarItem.title = @"desired title text"; 

完成。

0

使用此功能直接:

 private func updateTabBarTitles() { 
    if let navControllers = viewControllers as? [UINavigationController] { 

     let vcs = navControllers.map({$0.viewControllers.first!}) 

     for vc in vcs { 
      switch vc { 
      case is First: vc.navigationController?.tabBarItem.title = "firstVCTabbarTitle" 
      case is Second: vc.navigationController?.tabBarItem.title = "secondVCTabbarTitle" 
      default: break 

      } 
     } 
    } 
} 
相關問題