Ändern Sie die ausgewählte Farbe des Registerkartenleistenelements in einem Storyboard

175

Ich möchte meine Registerkartenleistenelemente so ändern, dass sie bei Auswahl anstelle des Standardblau rosa sind.

Wie kann ich dies mit dem Storyboard-Editor in Xcode 6 erreichen?

Hier sind meine aktuellen Einstellungen, die nicht funktionieren. Der blaue Hintergrund funktioniert, aber das Rosa funktioniert nicht:

Geben Sie hier die Bildbeschreibung ein

Deekor
quelle
Mögliches Duplikat der Tab-Bar-Item-Tint-Farbe !
User31
Überprüfen Sie diese Antwort, es wird Ihnen bei der Lösung helfen: stackoverflow.com/a/58727092/7804300
Talha Ahmed

Antworten:

408

Fügen Sie das Runtime Color-Attribut "tintColor" aus StoryBoard hinzu. Dies funktioniert ( für Xcode 8 und höher ).

Wenn Sie nicht ausgewählte Farben möchten, können Sie auch hinzufügen unselectedItemTintColor.

Festlegen von tintColor als Laufzeitattribut

Mehul Thakkar
quelle
24
Es hat bei mir funktioniert, als ich diese Eigenschaft zu UITabBarItem und nicht zu UITabBar hinzugefügt habe.
Sourabh86
1
Aber wie legen Sie die Option "Nicht ausgewählte Farbe" des Registerkartenleistenelements im Storyboard fest?
Peter
1
Funktioniert perfekt für meinen Fall - meine fünf tabBar-Elemente müssen bei Auswahl eindeutige Farben haben. Ich konnte dieses Laufzeitattribut auf der UITabBarItem, auf der UINavigationControllermit meiner Registerkarte verbundenen Leiste festlegen und es funktioniert einwandfrei. Alles ohne Code zu schreiben, was großartig ist, da ich eine VC-Klasse dreimal wiederverwenden werde. Vielen Dank!
Rosshump
7
Umgekehrt - dies ist der einzige Ansatz, der unter iOS 10 funktioniert (Farbton aus dem Attributfenster scheint nicht zu funktionieren, und das Laufzeitattribut "tintColor" von uitabbaritem funktioniert auch nicht.
luky
5
StackOverflow 1: Apple 0
Sharukh Mastan
175

Diese elegante Lösung funktioniert hervorragend mit SWIFT 3.0 , SWIFT 4.2 und SWIFT 5.1 :

Auf dem Storyboard:

  1. Wählen Sie Ihre Registerkartenleiste
  2. Legen Sie einen Laufzeit-Attibute mit dem Namen tintColor für die gewünschte Farbe des ausgewählten Symbols in der Registerkartenleiste fest
  3. Stellen Sie eine Runtime attibute genannt unselectedItemTintColor für die gewünschte Farbe des Nicht ausgewählte Symbol auf der Tab - Leiste

Geben Sie hier die Bildbeschreibung ein

Bearbeiten: Arbeiten mit Xcode 8/10 für iOS 10/12 und höher .

Marcelo Gracietti
quelle
6
Vielen Dank.
unselectedItemTintColor
4
'unselectedItemTintColor' perfekte Lösung für mich danke.
Fozoglu
Funktioniert dies, wenn das Bereitstellungsziel 8.0 oder 9.0 ist? Ich habe Swift 3.0 und Xcode 8.0 für die Entwicklung verwendet
Mamta
2
Wichtig, um die Tab-Leiste auszuwählen, hat in Swift 4 tatsächlich für mich funktioniert.
Nachteile Bulaquena
2
Ausgezeichnet! Arbeitet noch an xCode 10 :) aktualisiert den visuellen Editor nicht, funktioniert aber einmal kompiliert :)
Mihail Minkov
64

In Swift können Sie mit xcode 7 (und höher) Folgendes zu Ihrer AppDelegate.swift-Datei hinzufügen:

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

So sieht die vollständige Methode aus:

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
}

Im obigen Beispiel ist mein Artikel weiß. Das "/255.0" wird benötigt, weil es einen Wert von 0 bis 1 erwartet. Für Weiß hätte ich auch 1 verwenden können. Für andere Farben werden Sie wahrscheinlich RGB-Werte verwenden.

Jarrod
quelle
3
Es scheint, dass keine der anderen Methoden mehr funktioniert. Dies funktioniert!
Teddy
@Jarrod Ich habe fast 1 Stunde damit herumgespielt, diese Antwort sollte mehr Stimmen haben. Vielen Dank!
Lance Samaria
53

Am habe Xcode8ich das ImageTintvom Storyboard geändert und es funktioniert gut.

Geben Sie hier die Bildbeschreibung ein

Das Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Francisco Romero
quelle
1
Wenn Sie benutzerdefinierte Bilder verwenden, ist dies das, was für mich funktioniert hat
Juanjo
1
Dies sollte die akzeptierte Antwort sein. Es ist kein Laufzeitattribut erforderlich, was bedeutet, dass dies in Startbildschirmen funktioniert!
Chris Douglass
18

Swift 3 | Xcode 10

Wenn Sie möchten, dass alle Elemente der Registerkartenleiste dieselbe Farbe haben (ausgewählt und nicht ausgewählt) ...


Schritt 1

Stellen Sie sicher, dass Ihre Bildelemente auf Rendern als = Vorlagenbild eingerichtet sind . Dadurch können sie Farbe erben.

Xcode-Assets


Schritt 2

Verwenden Sie den Storyboard-Editor, um die Einstellungen Ihrer Registerkartenleiste wie folgt zu ändern:

  • Stellen Sie die Registerkartenleiste: Bildtönung auf die Farbe ein, die das ausgewählte Symbol übernehmen soll.
  • Set Tab Bar: Bar Farbton auf die Farbe wollen Sie die Tab - Leiste zu sein.
  • Set Ausblick: Farbton auf die Farbe , die Sie im Storyboard - Editor sehen möchten, dies hat keinen Einfluss auf das Symbol Farbe , wenn Ihre Anwendung ausgeführt wird.

Xcode Storyboard Editor


Schritt 3

Die Schritte 1 und 2 ändern die Farbe für das ausgewählte Symbol. Wenn Sie die Farbe der nicht ausgewählten Elemente weiterhin ändern möchten, müssen Sie dies im Code tun. Ich habe keine Möglichkeit gefunden, dies über den Storyboard-Editor zu tun.

Erstellen Sie eine benutzerdefinierte Controller-Klasse für Registerkartenleisten ...

//  TabBarController.swift

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

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

... und weisen Sie die benutzerdefinierte Klasse Ihrem Szenencontroller in der Registerkartenleiste zu.

Xcode Storyboard Editor


Wenn Sie herausfinden, wie Sie die nicht ausgewählte Symbolfarbe über den Storyboard-Editor ändern können, lassen Sie es mich bitte wissen. Vielen Dank!

Derek Soike
quelle
self.tabBar.unselectedItemTintColor = UIColor.white self.tabBar.tintColor = #colorLiteral(red: 0.2, green: 0.7333333333, blue: 0.3450980392, alpha: 1) Arbeite für mich
Wahab Khan Jadon
9

Fügen Sie diesen Code in viewDidLoad des Ansichtscontrollers ein, dessen Farbe Sie ändern möchten

[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];
Nick
quelle
1
Gibt es keine Möglichkeit, für alle Registerkarten Änderungen vorzunehmen?
Deekor
Nick
Sie können diesen Code direkt nach der Erstellung Ihres UITabControllers verwenden. Dadurch wird die Farbe festgelegt, die Sie für alle Registerkartenelemente bei der Auswahl angegeben haben.
Jerrin
Es gibt keine solche Methode setSelectedImageTintColor
Madhu Avinash
8

Sie können die Farbfarbe der ausgewählten Bildleiste auch über den Tastenpfad festlegen:

Geben Sie hier die Bildbeschreibung ein

Hoffe das wird dir helfen !! Vielen Dank

Arvind Kumar
quelle
in iOS 9 ändert es nicht die nicht ausgewählte Farbe
Saeed Rahmatolahi
Wie würde dies beim Ändern der Farbe des UITabBar-Symbols helfen?
Madhu Avinash
7

XCode 8.2, iOS 10, Swift 3: Jetzt gibt es ein unselectedItemTintColorAttribut für tabBar:

self.tabBar.unselectedItemTintColor = UIColor(red: 0/255.0, green: 200/255.0, blue: 0/255.0, alpha: 1.0)
ComboPrime
quelle
6

Sie können die Farben UITabBarItem per Storyboard ändern, aber wenn Sie die Farben per Code ändern möchten, ist dies sehr einfach:

// Verwenden Sie diese Option, um die Farbe des ausgewählten Balkens zu ändern

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

// Dies zum Ändern der nicht ausgewählten Leiste (iOS 10)

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

// Und diese Zeile zum Ändern der Farbe aller Registerkarten

   [[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];
Genevios
quelle
setUnselectedItemTintColor ist nur für iOS 10
ondermerol
5

Irgendwie können wir die Farbe des ausgewählten Elements in der Registerkartenleiste nicht allein mit dem Storyboard ändern. Daher habe ich in meinem ViewDidLoad den folgenden Code hinzugefügt. Ich hoffe, dies hilft.

[[UITabBar appearance] setTintColor:[UIColor whiteColor]]; 
Skypirat
quelle
5

Fügen Sie diesen Code in die Funktion -did_finish_launching_with_options Ihres App-Delegaten ein

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

Stellen Sie das RGB der gewünschten Farbe ein

SHINTO JOSEPH
quelle
4

Dies ist die Lösung in Swift 3, die in iOS 10 funktioniert:

Zunächst erstellen Sie Ihre eigene Tab-Bar-Controller-Unterklasse und fügen sie Ihrem Tab-Controller in Ihrem Storyboard hinzu. In der viewDidLoad()Methode können Sie dann die Registerkartenleiste anpassen. Hierbei ist zu beachten, dass das tintColorAttribut von die tabBarFarbe des ausgewählten Elements darstellt, nicht die Farbe der nicht ausgewählten! Um die Farbe der nicht ausgewählten Elemente zu ändern, empfehle ich, jedes Element zu durchlaufen und die Originalfarben Ihrer Bilder zu verwenden, damit sie nicht automatisch als grau gerendert werden.

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 )
                }
            }
        }
    }
}

Der einzige Nachteil bei diesem Ansatz ist, dass Ihre Artikelbilder bereits die gewünschte Farbe haben müssen, die Sie anstreben.

arauter
quelle
Kompliziert. Jarrods Antwort funktioniert gut mit allen Symbolen.
Jose Ramirez
4

Dieser beste Weg ist, das Image TintStoryboard zu ändern

Jadian
quelle
2

Sie können die Unterklasse festlegen UITabBarControllerund die im Storyboard durch diese ersetzen. viewDidLoadRufen Sie in Ihrer Implementierung der Unterklasse Folgendes auf:

[self.tabBar setTintColor:[UIColor greenColor]];
chancyWu
quelle
bekommen:'UITabBar' does not have a member named 'setSelectedImageTintColor'
Deekor
Auch ich benutze Swift, also habe ich gesagt: self.tabBar.setSelectedImageTintColor = UIColor.greenColor nicht sicher, ob das richtig ist oder nicht
Deekor
2
@Deekor ist es tintColornicht selectedImageTintColor, übrigens selectedImageTintColorist in iOS 8 veraltet.
chancyWu