Questo codice funziona bene con l'ultima versione di Swift come il mar 2017 (Swift 3.0)
Questo codice che ho implementato è l'estensione per il controllo del segmento e può essere utilizzato per tutti i controlli di segmento nell'applicazione, in cui l'insieme di codice deve essere definito nella classe dell'applicazione.
Il metodo di estensione può essere utilizzato direttamente nell'applicazione, inoltre è possibile aggiungere tutte le impostazioni allo stesso metodo o metodi diversi nella classe di estensione, come mostrato di seguito.
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!
}
}
Ovunque per i segmenti il codice qui sotto può essere utilizzato
self.mySegment.setSegmentStyle()

fonte
2017-03-18 16:31:36
Se mySegmentedControl un IBOutlet? Se lo è, dichiaralo @IBOutlet var mySegmentedControl = UISegmentedControl! Allora non hai bisogno del? operatore. Questo non risolverà l'intero problema, ma questa è una cosa. Se le sottoview [0] possono restituire nil, allora è un optional, quindi magari metti un! dopo [0]. – clearlight