как изменить стиль для UISegmentedControl, если он выбран Пользователем в Swift?
Это мой UISegmentedControl
написанный на Swift:
Я создал его со следующим кодом:
let selectedAttributes: NSDictionary = [
NSForegroundColorAttributeName: UIColor.black,
NSFontAttributeName: fontForSegmentedControl!
]
let normalAttributes: NSDictionary = [
NSForegroundColorAttributeName: UIColor.gray,
NSFontAttributeName: fontForSegmentedControl!
]
mySegmentedControl.setTitleTextAttributes(selectedAttributes as [NSObject : AnyObject], for: UIControlState.selected)
mySegmentedControl.setTitleTextAttributes(normalAttributes as [NSObject : AnyObject], for: UIControlState.normal)
И расширение для удаления границ здесь:
extension UISegmentedControl {
func removeBorders() {
setBackgroundImage(imageWithColor(color: UIColor.white/*backgroundColor!*/), for: .normal, barMetrics: .default)
setBackgroundImage(imageWithColor(color: tintColor!), for: .selected, barMetrics: .default)
setDividerImage(imageWithColor(color: UIColor.clear), forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
}
// 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!
}
}
Но есть одна вещь, которая не подходит для этого.
Когда я нажимаю (и удерживаю) ONE
или TWO
, он меняет цвет фона на этот (на время, когда его касается палец пользователя):
Мне не хватает кода для изменения стиля для выбранного (временного нажата) опция в UISegmentedControl
.
Как я могу удалить темно-серое выделение и оставить его с ясным цветом?
2 ответа:
Аналогично тому, как вы уже установили фоновое изображение для
UIControlState.normal
, вам нужно установить соответствующие изображения дляUIControlState.highlighted
иUIControlState.selected
+UIControlState.highlighted
.Добавьте следующий код в функцию расширения
removeBorders()
(предполагая, что вы хотите иметь четкий фон для нажатого не выбранного сегмента и цветной фон для нажатого выбранного):setBackgroundImage(imageWithColor(color: .clear), for: .highlighted, barMetrics: .default) setBackgroundImage(imageWithColor(color: tintColor!), for: [.selected, .highlighted], barMetrics: .default)
let normalAttributes: NSDictionary = [ NSForegroundColorAttributeName: UIColor.gray, NSFontAttributeName: fontForSegmentedControl! ] mySegmentedControl.setTitleTextAttributes(selectedAttributes as [NSObject : AnyObject], for: UIControlState.selected)
Приведенный выше код только добавляет серый цвет для выбора, поэтому измените его, как показано ниже
let normalAttributes: NSDictionary = [ NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: fontForSegmentedControl! ] mySegmentedControl.setTitleTextAttributes(selectedAttributes as [NSObject : AnyObject], for: UIControlState.selected)