2011-06-15 117 views
6

我的應用程序基於標籤欄體系結構。爲了使一個簡單的國際化機制,我不寫在XIB文件中的任何字符串。 viewdidload允許改變視圖中字符串的程序。以編程方式設置UITabBarItem標題?

當我的應用程序啓動時,我可以看到4個選項卡。但實際上只有第一個加載它的視圖控制器。其他人等待用戶點擊加載。 可以使用[self setTitle:@「Mouhahaha」]更改標籤標題;在viewDidLoad中加載視圖控制器。

如果我想讓我的國際化機制可用,我不會在我的XIB中設置tabbar項目的名稱。但是,在開始時,所有選項卡的視圖控制器都沒有加載,我有一些標籤的空白標題。只有當用戶點擊標籤時纔會設置正確的標題。

我正在尋找一種方法來爲每個tabbaritem設置此標題programaticaly。你有提示嗎?

非常感謝。

kheraud

回答

1

所有你需要做的是使的UITabBarController的一個實例,然後ALLOC你在它想要的任何意見,然後將意見的UITabBarController。確保您的TabBarController是可見的。還要確保您的標籤欄中所需的任何viewController正在導入#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的方式,但我不會去。

希望這有助於

+0

它的工作原理,但它是非常複雜的只是改變一些標籤...我想蘋果不希望我們進入tabbaritem – iwalktheline 2011-06-15 16:57:57

+0

那麼,相比一些T他其他的東西,他們做的,這是一個Cakewalk :-) – 2011-06-15 23:17:37

+0

如果有NavigationViewController而不是ViewController。 – dreamBegin 2016-07-08 13:30:38

2

我的首選用故事板這樣做編程在一起的方法是使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); 
}