2014-09-23 79 views
6

我有tabBarItem icon.Here一個問題是我的故事板的一部分的屏幕截圖。TabBarItem圖標不會在iOS中立即出現8

Storyboard

有一些按鈕,一個基本的viewController。當其中一個按鈕被觸摸時,將出現一個帶有三個選項卡的tabBarController。 在iOS系統中8,tabBarItems的圖標不會出現initially.If我改變視圖控制器,appear.if我選擇第三個選項卡以前和當前視圖控制器的兩個圖標,然後tabBarItems appear.Here的所有圖標是截圖我問題:TabBarController的

首次出現:

1st

如果我改變標籤:

2nd

下面是我使用設置tabBarItems的圖標(所有圖標是30×30)成TabBarController的第一的viewController的viewDidLoad方法的代碼:

[[[self.tabBarController.viewControllers objectAtIndex:0] tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"1d1.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"1b1.png"]]; 

[[[self.tabBarController.viewControllers objectAtIndex:1] tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"2d1.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"2b1.png"]]; 

[[[self.tabBarController.viewControllers objectAtIndex:2] tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"3d1.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"3b1.png"]]; 

這兒是IOS的7的屏幕截圖的正常工作:

right

誰能幫我這個?

+0

您是否嘗試過它的設備上嗎? – HAS 2014-09-23 13:00:41

+0

@HAS我沒有在設備上還沒有嘗試,因爲我還沒有在此刻與iOS 8的設備。你認爲模擬器可能會導致這個問題?但爲什麼這隻會發生在iOS 8的模擬器上呢? – hoya21 2014-09-23 13:07:54

+0

所有的模擬器都是時刻充滿了錯誤(好吧,當然這很誇張,但是當問題發生時你不應該相信它)。 – HAS 2014-09-23 13:14:31

回答

7

搜索和閱讀不同的答案,包括@砸落的回答,這部分代碼爲第一的viewController的viewDidLoad中的幾個小時後, TabBarController的差異和最終工作。

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 
{ 

    UITabBarItem *tabBarItem = [self.tabBarController.tabBar.items objectAtIndex:0]; 

    UIImage *unselectedImage = [UIImage imageNamed:@"1b1.png"]; 
    UIImage *selectedImage = [UIImage imageNamed:@"1d1.png"]; 

    [tabBarItem setImage: [unselectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 
    [tabBarItem setSelectedImage:[selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 


    UITabBarItem *tabBarItem1 = [self.tabBarController.tabBar.items objectAtIndex:1]; 

    UIImage *unselectedImage1 = [UIImage imageNamed:@"2b1.png"]; 
    UIImage *selectedImage1 = [UIImage imageNamed:@"2d1.png"]; 

    [tabBarItem1 setImage: [unselectedImage1 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 
    [tabBarItem1 setSelectedImage: [selectedImage1 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 

    UITabBarItem *tabBarItem2 = [self.tabBarController.tabBar.items objectAtIndex:2]; 

    UIImage *unselectedImage2 = [UIImage imageNamed:@"3b1.png"]; 
    UIImage *selectedImage2 = [UIImage imageNamed:@"3d1.png"]; 

    [tabBarItem2 setImage: [unselectedImage2 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 
    [tabBarItem2 setSelectedImage:[selectedImage2 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 


    [tabBarItem setTitle:@"Φωτογραφίες"]; 

    [tabBarItem2 setTitle:@"360° Φωτογραφία"]; 

    [tabBarItem1 setTitle:@"Βίντεο"]; 



} 
else 
{ 


    [[[self.tabBarController.viewControllers objectAtIndex:0] tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"1d1.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"1b1.png"]]; 


    [[[self.tabBarController.viewControllers objectAtIndex:1] tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"2d1.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"2b1.png"]]; 
    [[[self.tabBarController.viewControllers objectAtIndex:2] tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"3d1.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"3b1.png"]]; 

    [[[self.tabBarController.viewControllers objectAtIndex:0] tabBarItem] setTitle:@"Φωτογραφίες"]; 

    [[[self.tabBarController.viewControllers objectAtIndex:2] tabBarItem] setTitle:@"360° Φωτογραφία"]; 

    [[[self.tabBarController.viewControllers objectAtIndex:1] tabBarItem] setTitle:@"Βίντεο"]; 



} 
1

您可以設置通過故事板過這些圖片: http://imgur.com/lmyi1Nw

如果你想要這個以動態的方式,我建議從的UITabBarController繼承和覆蓋它的viewWillAppear中:

+0

我也嘗試了故事板。另外我試圖修復它從TabBarController,但我沒有道理。 – hoya21 2014-09-23 13:11:38

+0

你是對的,這沒有任何意義;) 順便說一句:[self.tabBarController.viewControllers objectAtIndex:0]從第一個VC調用等於自己 – Eike 2014-09-23 13:54:19

5

setFinishedSelectedImage:withFinishedUnselectedImage:從iOS的7棄用使用imageUITabBarItem代替selectedImage財產。

要設置自定義圖像:

UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0]; 

if ([self iOS7OrAbove]) 
{ 
    //use UIImageRenderingModeAlwaysOriginal to set the custom image for ios 7 and above. 
    tabBarItem1.selectedImage = [[UIImage imageNamed:@"SelectedImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
    tabBarItem1.image = [[UIImage imageNamed:@"UnselectedImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
} 
else 
{ 
    [tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"SelectedImage"] withFinishedUnselectedImage:[UIImage imageNamed:@"UnselectedImage"]]; 
} 

希望這會工作得很好。

即使setFinishedSelectedImage:withFinishedUnselectedImage:在iOS7過時了,它工作正常在iOS7但不是在8

+0

這兩個作品都不配合。我試圖在第一個ViewController的TabBarController或viewDidLoad方法中導入這部分代碼,並且在任何時候都不會出現任何圖標。 – hoya21 2014-09-24 09:00:23

+0

你可以通過在viewWillAppear中設置tabbar來檢查,因爲我有同樣的問題。 – Pushparaj 2014-09-24 09:53:46

+0

您是否正在使用登錄屏幕(withOut tabbar)然後繼續瀏覽其他屏幕?如果是這種情況,那麼你應該在顯示tabbar的第一個屏幕的viewWillAppear中設置tabbar。 – Pushparaj 2014-09-24 09:55:40

0

是的,這不能用故事板完成 - 需要編寫代碼。

你必須把它在viewDidLoad中的操作代碼

UITabBar *tabBar = self.tabBar; 

UITabBarItem *targetTabBarItem = [[tabbar items] objectAtIndex:0]; // whichever tab-item 
UIImage *selectedIcon = [UIImage imageNamed:@"name-of-selected-image.png"]; 
[targetTabBarItem setSelectedImage:selectedIcon];