2015-02-13 12 views
6

Ich habe folgenden Code verwendet, um den Hintergrund von UISegmentedControl zu setzen.Wie wird die Farbtonfarbe des Textes nur des ausgewählten Segments mit Swift eingestellt?

homeSegment.setDividerImage(UIImage(named: "seperator.png"), forLeftSegmentState: UIControlState.Normal, rightSegmentState: UIControlState.Normal, barMetrics: UIBarMetrics.Default) 



homeSegment.setBackgroundImage(UIImage(named: "squareSegment.png"), forState: UIControlState.Selected, barMetrics: UIBarMetrics.Default) 
homeSegment.setBackgroundImage(UIImage(named: "squareSegment.png"), forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default) 

Wie kann ich die Textfarbe des ausgewählten Segments einstellen?

Antwort

7

Ich erreiche dies mit setTitleTextAttributes. Im folgenden Beispiel wird ein Wörterbuch zum Festlegen von Attributen verwendet, da Sie wahrscheinlich Schriftart und -größe gleichzeitig festlegen möchten. Versuchen Sie dies Ihr ausgewähltes Segment Textfarbe auf rot zu setzen:

let segAttributes: NSDictionary = [ 
     NSForegroundColorAttributeName: UIColor.redColor(), 
        NSFontAttributeName: UIFont(name: "Avenir-MediumOblique", size: 20)! 
] 

homeSegment.setTitleTextAttributes(segAttributes as [NSObject : AnyObject], forState: UIControlState.Selected) 

Beispiel:

enter image description here

0

@Portland Runner Antwort für die ältere Version von Swift ist.

Swift 3.0, das funktioniert.

Logik ist die gleiche wie die @Portland Runner, aber die Syntax modifiziert und aktualisiert nach Swift 3.0

hier, um diesen Code, den ich umgesetzt haben, ist die Erweiterung für das Steuer Segment und kann für alle Segmentsteuerungen verwendet werden in der Anwendung, wo der Code in der Anwendungsklasse definiert werden muss.

extension UISegmentedControl { 
func setSegmentStyle() { 
    setBackgroundImage(imageWithColor(color: backgroundColor!), for: .normal, barMetrics: .default) 
    setBackgroundImage(imageWithColor(color: tintColor!), for: .selected, barMetrics: .default) 
    setDividerImage(imageWithColor(color: UIColor.clear), forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default) 



    let segAttributes: NSDictionary = [ 
      NSForegroundColorAttributeName: UIColor.gray, 
      NSFontAttributeName: UIFont(name: "System-System", size: 14)! 
     ] 

     setTitleTextAttributes(segAttributes as [NSObject : AnyObject], for: UIControlState.selected) 
    } 

    // create a 1x1 image with this color 
    private func imageWithColor(color: UIColor) -> UIImage { 
     let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0) 
     UIGraphicsBeginImageContext(rect.size) 
     let context = UIGraphicsGetCurrentContext() 
     context!.setFillColor(color.cgColor); 
     context!.fill(rect); 
     let image = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     return image! 
    } 
} 

Überall für die Segmente die folgenden Code verwendet werden kann

self.mySegment.setSegmentStyle() 

enter image description here

3

für Swift 4,0

let fontAttribute = [NSAttributedStringKey.font: UIFont(name: "Montserrat-Regular", size: 12)!, 
         NSAttributedStringKey.foregroundColor: UIColor.red] 

segmentedControl.setTitleTextAttributes(fontAttribute, for: .normal) 
Verwandte Themen