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


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


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 .


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.


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


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!


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]];

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


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)

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]];

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]]; 

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


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.


Skomplikowane. Odpowiedź Jarroda działa dobrze w przypadku wszystkich ikon.
Jose Ramirez


2

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

[self.tabBar setTintColor:[UIColor greenColor]];

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.