2013-09-24 21 views
7

Im obecnie używam Xcode 5 do opracowania aplikacji zorientowanej na listę. Mam niestandardowy odcień dla paska kart, niestandardowe obrazy dla ikon kart, niestandardowy odcień dla obrazów ikon paska kart po wybraniu, ale nie mogę znaleźć sposobu dostosowania odcienia obrazów ikon, gdy nie jest on wybrany. W tej chwili jest to tylko domyślne szare, które ledwo widać w przeciwieństwie do mojego zielonego paska kart. Chcę, aby obrazy ikon paska kart i nazwy były białe.Niestandardowe kolory paska ikon na karcie

Czy ktoś wie, jak ustawić odcień paska ikon paska w Xcode 5?

Odpowiedz

17

Można spróbować to odcień wybranej ikony:

// Custom the tab bar 
[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]]; 

a to zabarwienie Nieaktywne ikony:

[self.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"item_seleted.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"item_unselected.png"]]; 
+2

Zauważ, że setFinisheSelectedImage: withFinishedUnselectedImage jest przestarzałe w iOS 7. –

+0

Matthew jeśli jego przestarzałe w iOS 7 jest jakiś inny sposób, aby przejść o tym czy jest to po prostu dlatego, że Apple chce zachować szarą standardu domyślne ikony? – ian

+0

@ user2792129 - tak, zajęło mi kilka minut, aby uzyskać moją odpowiedź wpisaną w

26

Musisz ustawić tryb renderowania dla (niewyselekcjonowanej) obraz każdej karcie jest do UIImageRenderingModeAlwaysOriginal. Tak więc, w delegacie aplikacji, uzyskaj odnośnik do paska kart, a następnie wykonaj iterację nad każdym elementem paska kart, dostosowując tryby obrazu.

Nie ma chyba lepszego sposobu, aby uzyskać odwołanie do paska kart, ale zrobiłem co następuje:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
UITabBarController *tbc = [sb instantiateInitialViewController]; 
self.window.rootViewController = tbc; 
UITabBar *tb = tbc.tabBar; 

Następnie regulacja obrazu można dokonać w następujący sposób:

NSArray *items = tb.items; 

for (UITabBarItem *tbi in items) { 
    UIImage *image = tbi.image; 
    tbi.selectedImage = image; 
    tbi.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
} 
+0

Dzięki Matthew. Wstawiłem ten kod do mojego delegata aplikacji .m i zwróciłem problem z komunikatem "nieobsługiwana konfiguracja" "Zwykły styl nieobsługiwany w elemencie nawigacyjnym, Main.storyboard." – ian

+0

Mój kod zakłada, że ​​kontroler paska kart jest początkowym kontrolerem widoku w scenorysie. Jeśli Twoja aplikacja jest skonfigurowana inaczej, może to być źródłem problemu. –

+0

Działa to tylko dla jednego z obrazów. Zasadniczo mam niezaznaczoną i wybraną ikonę. Ten trik dokonał nieselekcjonowanej pracy, ale wybrany jest nadal po prostu niebieskim bałaganem. – Halsafar

5

Wypróbuj way..it pracował dla mnie

w aPP delegata

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 


UITabBarController *tabBarController=(UITabBarController*)(self.window.rootViewController); 
    UITabBar *tabBar=tabBarController.tabBar; 
    UITabBarItem *tabBarItem1=[[tabBar items] objectAtIndex:0];//first tab bar 
[tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"yourImageSelected.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"yourImageUnselected.png"]];//image should be 30 by 30 
} 

Uruchom i odłóż

4

Ustawianie niestandardowego paska zadań z wybranym i niezobowiązującym obrazem. mający także tabbarItem pozycję wypustkami obrazu w centrum

UITabBar *tabBar = self.tabBarController.tabBar; 

UITabBarItem *item0 = [tabBar.items objectAtIndex:0]; 
UITabBarItem *item1 = [tabBar.items objectAtIndex:1]; 
UITabBarItem *item2 = [tabBar.items objectAtIndex:2]; 
UITabBarItem *item3 = [tabBar.items objectAtIndex:3]; 

[item0 setFinishedSelectedImage:[UIImage imageNamed:@"iconBlue.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"iconGray.png"] ]; 
[item1 setFinishedSelectedImage:[UIImage imageNamed:@"iconBlue2.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"icon-2.png"]]; 
[item2 setFinishedSelectedImage:[UIImage imageNamed:@"iconBlue3.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"icon-3.png"]]; 
[item3 setFinishedSelectedImage:[UIImage imageNamed:@"iconBlue4.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"icon-4.png"]]; 

item0.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0); 
item1.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0); 
item2.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0); 
item3.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0); 

** w metodzie viewWillAppear pierwszego viewcontroller. **

3

Ponieważ setFinishedSelectedImage: withFinishedUnselectedImage jest przestarzała, użyłem zmienioną wersję odpowiedzi Ram S poprzez zastąpienie:

[item0 setFinishedSelectedImage:[UIImage imageNamed:@"iconBlue.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"iconGray.png"] ]; 

z:

[item0 setImage:[[UIImage imageNamed:@"iconGray.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 
[item0 setSelectedImage:[[UIImage imageNamed:@"iconBlue.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 

Zobacz UITabBarItem setFinishedSelectedImage: deprecated in iOS7 aby uzyskać więcej informacji.

+0

dzięki, uratowałeś moje dwa dni ... –

5

Jeśli masz pasek kart w edytorze wizualnym, możesz to zrobić tutaj. Wybierz pasek kart w „User Defined Runtime Atrybuty” dodaj atrybut: ścieżkę klucza: selectedImageTintColor Typ: Kolor wartość:

+1

Jak urok. Czy jest też piękna magia dla nie wybranych ikon? –

6

Można to zrobić wyłącznie z ujęć bez konieczności pisania kodu dodając „User Defined Runtime Atrybut „:

  1. Wybierz UITabViewController w serii ujęć
  2. otworzyć«Zarys dokumentu»i upewnij się, że wybrać zakładkę«bar»pogląd na scenie.
  3. Pokaż "Inspektora tożsamości". Powinieneś zobaczyć przekrój przez "Użytkownika Runtime Atrybuty"
  4. Dodaj następujący:
    • Key Path: tintColor
    • Typ: Kolor
    • Wartość: Wybierz żądany kolor.
+2

Dobrze wiedzieć. Jednak Atrybuty Runtime zdefiniowane przez użytkownika są absolutnym koszmarem debugowania. –

+1

Co jeszcze można użyć tintColor w ścieżce klucza? –

+1

@RasmusBidstrup, wszystkie odpowiednie właściwości wybranego elementu IB. W naszym przypadku UITabBar. Więc idź do Apple Doc i przeczytaj dokumentację UITabBar. – OhadM

Powiązane problemy