Zmień wybrany kolor elementu paska kart w serii ujęć

175

Chcę zmienić moje elementy paska kart na różowe po wybraniu zamiast domyślnego niebieskiego.

Jak mogę to osiągnąć za pomocą edytora scenariuszy w Xcode 6?

Oto moje obecne ustawienia, które nie działają, niebieskie tło działa, ale różowy nie działa:

wprowadź opis obrazu tutaj

Deekor
źródło
Możliwy duplikat tab-bar-item-tint-color !
31
Sprawdź tę odpowiedź, która pomoże ci znaleźć rozwiązanie: stackoverflow.com/a/58727092/7804300
Talha Ahmed

Odpowiedzi:

408

Dodaj atrybut Runtime Color o nazwie „tintColor” ze StoryBoard. To działa ( dla Xcode 8 i nowszych ).

jeśli chcesz niewybrany kolor ... możesz unselectedItemTintColorteż dodać .

ustawienie tintColor jako Runtime Attribute

Mehul Thakkar
źródło
24
zadziałało dla mnie, gdy dodałem tę właściwość do UITabBarItem, a nie do UITabBar.
Sourabh86
1
Ale jak ustawić kolor elementu paska kart NIEwybrany w serii ujęć?
Peter
1
Działa idealnie w moim przypadku - potrzebuję moich pięciu elementów tabBar, aby po wybraniu miały niepowtarzalne kolory. Udało mi się ustawić ten atrybut Runtime na UITabBarItem, na UINavigationControllerpodłączonym do mojego tabBaru i działa bezbłędnie. Wszystko to bez pisania kodu, co jest świetne, ponieważ trzykrotnie używam klasy VC. Dzięki!
rosshump
7
odwrotnie - jest to jedyne podejście, które działa na iOS 10 (tint z panelu atrybutów wydaje się nie działać, a atrybut runtime „tintColor” uitabbaritem też nie działa.
luky
5
StackOverflow 1: Apple 0
Sharukh Mastan
175

To eleganckie rozwiązanie działa świetnie na SWIFT 3.0 , SWIFT 4.2 i SWIFT 5.1 :

Na Storyboard:

  1. Wybierz pasek kart
  2. Ustaw atrybut wykonawczy o nazwie tintColor dla żądanego koloru wybranej ikony na pasku kart
  3. Ustaw atrybut czasu wykonywania o nazwie unselectedItemTintColor dla żądanego koloru niewybranej ikony na pasku kart

wprowadź opis obrazu tutaj

Edycja: praca z Xcode 8/10, iOS 10/12 i nowszym .

Marcelo Gracietti
źródło
6
Wielkie dzięki. unselectedItemTintColor znajduje bardzo rzadkie
Rushi trivedi
4
„unselectedItemTintColor” idealne rozwiązanie dla mnie dzięki.
fozoglu
Czy to zadziała, jeśli celem wdrożenia jest 8.0 lub 9.0? Użyłem Swift 3.0 i Xcode 8.0 do programowania
Mamta
2
Ważne, aby wybrać pasek kart, rzeczywiście działał w Swift 4 dla mnie.
Cons Bulaquena,
2
Doskonały! Nadal pracuję nad xCode 10 :) nie odświeża edytora wizualnego, ale działa po skompilowaniu :)
Mihail Minkov
64

W Swift, używając xcode 7 (i nowszych), możesz dodać następujące elementy do pliku AppDelegate.swift:

UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)

Oto jak wygląda cała metoda:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    // I added this line
    UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)

    return true
}

W powyższym przykładzie mój przedmiot będzie biały. „/255.0” jest potrzebne, ponieważ oczekuje wartości od 0 do 1. W przypadku bieli mogłem po prostu użyć 1. Ale dla innych kolorów prawdopodobnie użyjesz wartości RGB.

Jarrod
źródło
3
Wygląda na to, że żadna inna metoda (już nie działa). To działa!
teddy
@Jarrod Bawiłem się tym przez prawie 1 godzinę, ta odpowiedź powinna mieć więcej głosów. Dzięki!
Lance Samaria
53

Na Xcode8I zmienili ImageTintod ujęć i to działa dobrze.

wprowadź opis obrazu tutaj

Wynik:

wprowadź opis obrazu tutaj

Francisco Romero
źródło
1
Podczas korzystania z niestandardowych obrazów TO JEST ten, który działał dla mnie
Juanjo
1
To powinna być akceptowana odpowiedź. Nie wymaga atrybutu runtime, co oznacza, że ​​działa to na ekranach uruchamiania!
Chris Douglass
18

Swift 3 | Xcode 10

Jeśli chcesz, aby wszystkie elementy paska kart miały ten sam kolor (zaznaczone i niezaznaczone) ...


Krok 1

Upewnij się, że zasoby obrazu są skonfigurowane do renderowania jako = obraz szablonu . To pozwala im dziedziczyć kolor.

Zasoby Xcode


Krok 2

Użyj edytora scenorysów, aby zmienić ustawienia paska kart w następujący sposób:

  • Ustaw pasek kart: Odcień obrazu na kolor, który ma odziedziczyć wybrana ikona.
  • Ustaw pasek kart : Odcień paska na kolor, jaki ma mieć pasek kart.
  • Ustaw widok: Odcień do koloru, który chcesz zobaczyć w edytorze scenorysu, nie ma to wpływu na kolor ikony po uruchomieniu aplikacji.

Edytor scenariuszy Xcode


Krok 3

Kroki 1 i 2 zmienią kolor wybranej ikony. Jeśli nadal chcesz zmienić kolor niezaznaczonych elementów, musisz to zrobić w kodzie. Nie znalazłem sposobu, aby to zrobić za pomocą edytora scenariuszy.

Utwórz niestandardową klasę kontrolera paska kart ...

//  TabBarController.swift

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // make unselected icons white
        self.tabBar.unselectedItemTintColor = UIColor.white
    }
}

... i przypisz niestandardową klasę do kontrolera sceny paska kart.

Edytor scenariuszy Xcode


Jeśli dowiesz się, jak zmienić niewybrany kolor ikony za pomocą edytora scenorysów, daj mi znać. Dzięki!

Derek Soike
źródło
self.tabBar.unselectedItemTintColor = UIColor.white self.tabBar.tintColor = #colorLiteral(red: 0.2, green: 0.7333333333, blue: 0.3450980392, alpha: 1) Pracuj dla mnie
Wahab Khan Jadon
9

umieść ten kod w viewDidLoad kontrolera widoku, którego kolor chcesz zmienić

[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];
Nacięcie
źródło
1
Czy nie ma możliwości zmiany dla wszystkich kart?
Deekor
Po prostu umieść kod tego samego koloru w widoku, aby załadować wszystkie twoje karty
Nick,
możesz użyć tego kodu zaraz po utworzeniu UITabController, ustawi on kolor, o którym wspomniałeś, dla wszystkich elementów zakładki przy wyborze.
Jerrin,
Nie ma takiej metody setSelectedImageTintColor
Madhu Avinash
8

Możesz również ustawić odcień wybranego koloru paska obrazu za pomocą ścieżki klucza:

wprowadź opis obrazu tutaj

Mam nadzieję, że to ci pomoże !! Dzięki

Arvind Kumar
źródło
w iOS 9 nie zmienia niewybranego koloru
Saeed Rahmatolahi
Jak to pomogłoby w zmianie koloru ikony UITabBar?
Madhu Avinash,
7

XCode 8.2, iOS 10, Swift 3: teraz istnieje unselectedItemTintColoratrybut dla tabBar:

self.tabBar.unselectedItemTintColor = UIColor(red: 0/255.0, green: 200/255.0, blue: 0/255.0, alpha: 1.0)
ComboPrime
źródło
6

Możesz zmienić kolory UITabBarItem według scenorysu, ale jeśli chcesz zmienić kolory według kodu, jest to bardzo łatwe:

// Użyj tego do zmiany koloru wybranego paska

   [[UITabBar appearance] setTintColor:[UIColor blueColor]];

// Pasek niezaznaczony dla zmiany (iOS 10)

   [[UITabBar appearance] setUnselectedItemTintColor:[UIColor yellowColor]];

// I ta linia do zmiany koloru wszystkich zakładek

   [[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];
Genevios
źródło
setUnselectedItemTintColor jest tylko dla iOS 10
ondermerol
5

W jakiś sposób nie jesteśmy w stanie zmienić koloru wybranego elementu na pasku kart Odcień za pomocą samego scenariusza, dlatego dodałem poniższy kod w moim ViewDidLoad, mam nadzieję, że to pomoże.

[[UITabBar appearance] setTintColor:[UIColor whiteColor]]; 
skypirate
źródło
5

Dodaj ten kod do funkcji delegata aplikacji -did_finish_launching_with_options

UITabBar.appearance().tintColor = UIColor( red: CGFloat(255/255.0), green: CGFloat(99/255.0), blue: CGFloat(95/255.0), alpha: CGFloat(1.0) )

umieść RGB wymaganego koloru

SHINTO JOSEPH
źródło
4

Oto rozwiązanie w Swift 3, które działa w iOS 10:

Po pierwsze, tworzysz własną podklasę kontrolera paska kart i dodajesz ją do kontrolera kart w swoim storyboardzie. W viewDidLoad()metodzie możesz następnie dostosować pasek kart. W tym miejscu należy zaznaczyć, że tintColoratrybut z tabBarreprezentuje kolor wybranej pozycji, a nie kolor niewybranych! Aby zmienić kolor niezaznaczonych elementów, zalecamy przejrzenie każdego elementu w pętli i użycie oryginalnych kolorów obrazów, aby nie były automatycznie renderowane jako szare.

class CustomTabBarVC: UITabBarController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()

        self.tabBar.tintColor = AppColor.normalRed
        self.tabBar.barTintColor = .white
        self.tabBar.isTranslucent = true

        if let items = self.tabBar.items
        {
            for item in items
            {
                if let image = item.image
                {
                    item.image = image.withRenderingMode( .alwaysOriginal )
                }
            }
        }
    }
}

Jedynym minusem tego podejścia jest to, że obrazy przedmiotów muszą już mieć żądany kolor.

arauter
źródło
Skomplikowane. Odpowiedź Jarroda działa dobrze w przypadku wszystkich ikon.
Jose Ramirez
4

Najlepszym sposobem jest zmiana Image Tintw scenorysie

Jadian
źródło
2

Możesz podklasować UITabBarControlleri zastąpić go w serii ujęć. W swojej viewDidLoadimplementacji podklasy nazwij to:

[self.tabBar setTintColor:[UIColor greenColor]];
chancyWu
źródło
pobieranie:'UITabBar' does not have a member named 'setSelectedImageTintColor'
Deekor
Używam też Swift, więc self.tabBar.setSelectedImageTintColor = UIColor.greenColor
dodam
2
@Deekor to tintColornie jest selectedImageTintColor, btw selectedImageTintColorjest przestarzałe w iOS 8.
chancyWu