2017-10-05 167 views
0

我試圖改變標籤欄項目圖像的顏色繪製灰度圖像,這個我使用下面的代碼:的iOS標籤欄自定義項目圖像,標籤欄左側

// Generate a tinted unselected image based on image passed via the storyboard. 
for (UIViewController *vc in tabBarController.viewControllers) { 
    UITabBarItem *item = vc.tabBarItem; 
    UIImage *image = item.image; 
    UIImage *imageSel = [image imageWithColor:selectedColor]; 
    UIImage *imageUnsel = [image imageWithColor:unselectedColor]; 

    // Next is not working to set unselected image! 
    // But setFinishedSelectedImage does. 
    //item.selectedImage = imageSel; 
    item.image = imageSel; 
    //[item setFinishedSelectedImage:imageSel withFinishedUnselectedImage:imageUnsel]; 
} 

UITabBarItem *item = tabBarController.moreNavigationController.tabBarItem; 
UIImage *image = [UIImage imageNamed:@"menu-more"]; 
UIImage *imageSel = [image imageWithColor:selectedColor]; 
UIImage *imageUnsel = [image imageWithColor:unselectedColor]; 
item.image = imageSel; 
// [item setFinishedSelectedImage:imageSel withFinishedUnselectedImage:imageUnsel]; 

imageWithColor:是的UIImage擴展使用原始圖像的alpha值生成具有顏色的圖像。

代碼首次執行,一切都很好。

更改顏色(調用上面的代碼)後,所有標籤欄項目都顯示在標籤欄左側的文本中。在模擬器和設備(iPhone + iPad)中都會發生。這是一個錯誤?

enter image description here

回答

0

那麼我想出了修復。而不是設置UITabBarItem的形象,你需要從頭創建UITabBarItem並設置圖像出現,就像這樣:

for (UIViewController *vc in tabBarController.viewControllers) { 
    UITabBarItem *newItem = [[UITabBarItem alloc] initWithTitle:someTitle image:someImageUnsel selectedImage:someImageSel]; 
    vc.tabBarItem = newItem; 
} 

UITabBarItem *newItem = [[UITabBarItem alloc] initWithTitle:someTitle image:someImageUnsel selectedImage:someImageSel]; 
tabBarController.moreNavigationController.tabBarItem = newItem; 

有這種解決方案雖然一個問題:設置它的tabBarItem後MoreNavigationController會彈回。普通蘋果,wtf ?!

如果有人可以提供更好的解決方案,請做...

0

您可以設置圖像用故事板本身tabbaritem。要將顏色更改爲選定的tabbaritem,無需爲循環編寫任何代碼。您可以使用下面的行。

 [[UITabBar appearance] setTintColor:[UIColor greenColor]]; 
+0

這隻會改變所選項目的顏色,但未選中的項目將顯示爲灰色。已經嘗試過。 – Borzh

+0

我可以知道你使用tabbaritem圖像的選定和未選擇的顏色。 – Rajesh

+0

是的,兩者,實際上未選中的顏色與選定的顏色相同,但只有0.5的alpha。 – Borzh