2016-09-08 52 views
8

W Swift 2 Użyłem atrybutu Runtime zdefiniowanego przez użytkownika w Storyboard ze ścieżką klucza tintColor, aby zmienić kolory ikon elementów paska kart. Wygląda jednak na to, że tintColor został usunięty za pomocą Swift 3. Jak zmienić wybrany kolor elementów paska tabulacji w kontrolerze paska kart w Swift 3?Kolor przycisku Tab Bar w Swift 3?

Dzięki!

EDIT: Załączony zrzut ekranu

enter image description here

+0

Próbowaliśmy go w Xcode 8 szybkiej 3, działa bez zarzutu . Czy ustawiasz kolor tinty na pasku kart lub na jednym z elementów paska? –

+0

Dzięki za odpowiedź! Próbuję ustawić kolor poszczególnych elementów. Właśnie załączyłem zrzut ekranu. – winston

Odpowiedz

10

Zastosowanie tabBarItem.setTitleTextAttributes zmienić kolor tekstu poszczególnych elementów kreskowych.
umieścić to w viewDidLoad metody każdej zakładce:

self.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red()], for:.selected) 

Aby zmienić ikonę i odcień koloru tekstu razem prostym rozwiązaniem jest, aby zmienić kolor umieszczenie zakładek odcień w metodzie viewWillAppear każdej zakładce:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    self.tabBarController?.tabBar.tintColor = UIColor.red() 
} 

Innym rozwiązaniem służącym do zmiany koloru odbarwiania obrazu jest utworzenie rozszerzenia dla UIImage i użycie go do zmiany wybranego obrazu za pomocą niestandardowy odcień:

extension UIImage { 
    func tabBarImageWithCustomTint(tintColor: UIColor) -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) 
     let context: CGContext = UIGraphicsGetCurrentContext()! 

     context.translate(x: 0, y: self.size.height) 
     context.scale(x: 1.0, y: -1.0) 
     context.setBlendMode(CGBlendMode.normal) 
     let rect: CGRect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height) 

     context.clipToMask(rect, mask: self.cgImage!) 

     tintColor.setFill() 
     context.fill(rect) 

     var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()! 
     UIGraphicsEndImageContext() 

     newImage = newImage.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
     return newImage 
    } 
} 

użyć tego kodu, aby zmienić wybrany obraz:

self.tabBarItem.selectedImage = self.tabBarItem.selectedImage?.tabBarImageWithCustomTint(tintColor: UIColor.red()) 
+0

Przepraszam, powinienem być bardziej konkretny. Chcę zmienić kolor ikony. Już wymyśliłem, jak zmienić tekst. Dzięki! – winston

+0

@james zobacz moją zredagowaną odpowiedź. –

+0

To działa świetnie. Dzięki!! – winston

0

najnowszy kod jako par Swift 3

extension UIImage { 

    func tabBarImageWithCustomTint(tintColor: UIColor) -> UIImage { 

     UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) 
     let context: CGContext = UIGraphicsGetCurrentContext()! 

     context.translateBy(x: 0, y: self.size.height) 
     context.scaleBy(x: 1.0, y: -1.0) 
     context.setBlendMode(CGBlendMode.normal) 
     let rect: CGRect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height) 

     context.clip(to: rect, mask: self.cgImage!) 

     tintColor.setFill() 
     context.fill(rect) 

     var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()! 
     UIGraphicsEndImageContext() 

     newImage = newImage.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
     return newImage 
    } 
}