Этот код прекрасно работает с последней версией Swift, как в марте 2017 года (Swift 3.0)
Здесь этот код, который я реализовал, является расширением для управления сегментом и может использоваться для всех элементов управления сегментами в приложении, где набор кода должен быть определен в классе приложения.
Метод расширения может использоваться непосредственно в приложении, также вы можете добавить все настройки к тому же методу или другим методам в классе расширения, как показано ниже.
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!
}
}
Везде для сегментов ниже код может быть использован
self.mySegment.setSegmentStyle()
Если mySegmentedControl - IBOutlet? Если это так, объявите его @IBOutlet var mySegmentedControl = UISegmentedControl! Тогда вам не нужно? оператор. Это не решит всю проблему, но это одно. Если subviews [0] может возвращать nil, то это необязательно, так что, возможно, положите! после [0]. – clearlight