2010-08-07 40 views
19

我增加了徽章我的UITabBarController的UITabBar這樣:如何將徽章添加到可自定義的UITabBar?

UITabBarItem *tbi = (UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:1]; 
tbi.badgeValue = @"2"; 

然而,我的UITabBarController是可定製的,因此指數可能會改變。我怎樣才能確保徽章得到適用於正確的UITabBarItem?

回答

11
UITabBarItem *tbi = (UITabBarItem *)self.tabController.selectedViewController.tabBarItem; 
tbi.badgeValue = @"New"; 

也有效。

0

保留對您要修改的標籤欄項目的引用。

編輯爲你的代碼請求的響應:
我相信,在你的應用程序一個地方,你更新標籤欄項目徽章。只需添加一組標籤欄項目(或單獨的標籤欄項目)作爲該類別的成員(如果需要+屬性),並直接更新項目而不從當前標籤欄項目列表((UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:1];)中獲取。

舉例來說,如果你決定把直接在標籤欄項目的引用(不包括數組),那麼代碼可能看起來像:

// Put the next code right after initiating the tab bar and/or after adding new tab bar items to it... 

self.newsTabBarItem = (UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:1]; 
self.friendsTabBarItem = (UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:2]; 

// etc. 
+0

你能告訴我在代碼中? – 2010-08-08 17:14:51

+1

我編輯了我的答案。看看它是否可以幫助你。 – 2010-08-08 22:00:55

1

我對類使用一個NSMutableDictionary屬性,擁有標籤欄控制器,關聯與位置標籤名稱,以名稱檢索方法:

-(UITabBarItem*)getTabByName:(NSString*)tabName { 
    return [stTabBarController.tabBar.items objectAtIndex:[[tabDict valueForKey:tabName] intValue]]; 
} 

初始化字典中爲每個標籤的設置代碼,因爲你知道當時的標籤索引:

[tabDict setValue:[stTabBarController.tabBar.items objectAtIndex:1] forKey:@"myTabName"]; 
15

你可能會考慮的一個建議是在每個標籤欄項目上設置一個標籤。您可以在Interface Builder中或通過代碼創建項目時執行此操作。然後,您可以通過在標籤欄控制器尋找一個與標籤欄項目您感興趣的視圖控制器循環,例如:

// #define MyTabBarItemTag 999 

for (UIViewController *viewController in stTabBarController.viewControllers) { 
    if (viewController.tabBarItem.tag == MyTabBarItemTag) { 
     viewController.tabBarItem.badgeValue = @"2"; 
    } 
} 
2

斯威夫特版本:

self.tabBarController?.selectedViewController?.tabBarItem.badgeValue="12"; 
相關問題