Как изменить стиль для 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
.
Как удалить оттенок темно-серого цвета и оставить его четким цветом?
Ответы
Ответ 1
Аналогично тому, как вы уже установили фоновое изображение для 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)
Ответ 2
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)