Я могу установить цвет фона для кнопки, но я не могу определить, как установить цвет фона для UIControlState.Highlighted
. Возможно ли это? или мне нужно спуститься по пути setBackgroundImage
?Как установить цвет фона UIButton forState: UIControlState.Highlighted in Swift
ответ
Если кто-то останавливается, другой путь, может быть более легко, если это то, что вам нужно больше, чем когда-то ... Я написал короткое расширение для UIButton, он прекрасно работает :
extension UIButton {
func setBackgroundColor(color: UIColor, forState: UIControlState) {
UIGraphicsBeginImageContext(CGSize(width: 1, height: 1))
CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(), color.CGColor)
CGContextFillRect(UIGraphicsGetCurrentContext(), CGRect(x: 0, y: 0, width: 1, height: 1))
let colorImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.setBackgroundImage(colorImage, forState: forState)
}}
Вы используете его как setBackgroundImage
:
yourButton.setBackgroundColor(UIColor.whiteColor(), forState: UIControlState.Highlighted)
Это разрушит автоматическую компоновку и удалит угловой радиус. –
@ stephan1001 как он это сделает? Изображение только 1x1, поэтому оно растянуто, чтобы соответствовать кнопке? – ErikPerik
@ user4788711 так же, как установка фонового изображения. Не больше, не меньше. – winterized
Ниже приводится один из вариантов. Два IBActions. Один для управления цветом фона при нажатии кнопки, один - при отпускании.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
@IBAction func buttonClicked(sender: AnyObject) { //Touch Up Inside action
button.backgroundColor = UIColor.whiteColor()
}
@IBAction func buttonReleased(sender: AnyObject) { //Touch Down action
button.backgroundColor = UIColor.blueColor()
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
Когда вы смотрите на варианты автозаполнения для вашей кнопки после добавления период, вы можете установить цвет фона, но не для указанного состояния. Вы можете устанавливать только фоновые изображения. Теперь, конечно, если вы состоите в браке, чтобы сделать это таким образом, вместо того, чтобы использовать метод, показанный выше, вы можете загрузить изображение желаемого цвета в качестве фонового изображения, используя свойство setbackgroundImageForState.
Это будет работать отлично! Благодаря! –
Это решение работает только в ViewController, но не в TableViewController.Прикосновение вниз действие также работает в TVC, но только с некоторой задержкой в миллисекундах, так как быстрое касание на экране не изменяет цвет кнопки. Я думаю, что есть какая-то проблема с ячейкой, в которой находится кнопка, но я не уверен. –
Я столкнулся точно в той же проблеме. Если я использую только просмотр, но ничего не происходит, потому что цвет уже вернулся к старому цвету. Я мог бы исправить эту проблему с небольшой задержкой, чтобы цвет переключился на несколько миллисекунд позже. Таким образом, цвет отображается, даже если пользователь только кратковременно отбирает. –
Можем ли мы сделать то же самое с использованием атрибутов времени выполнения?
@IBInspectable var HighlightedBackground: Bool {
get {
return true
}
set {
layer.backgroundColor = Common.sharedInstance.OrangeColor.CGColor
print("highlighted state")
}
}
Синтаксис изменения в @winterized extension синтаксиса Swift 3+
extension UIButton {
func setBackgroundColor(color: UIColor, forState: UIControlState) {
UIGraphicsBeginImageContext(CGSize(width: 1, height: 1))
UIGraphicsGetCurrentContext()!.setFillColor(color.cgColor)
UIGraphicsGetCurrentContext()!.fill(CGRect(x: 0, y: 0, width: 1, height: 1))
let colorImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.setBackgroundImage(colorImage, for: forState)
}}
Swift 4 Версия this solution:
extension UIButton {
func setBackgroundColor(_ color: UIColor, for state: UIControlState) {
UIGraphicsBeginImageContext(CGSize(width: 1, height: 1))
UIGraphicsGetCurrentContext()!.setFillColor(color.cgColor)
UIGraphicsGetCurrentContext()!.fill(CGRect(x: 0, y: 0, width: 1, height: 1))
let colorImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
setBackgroundImage(colorImage, for: state)
}
}
Просто небольшое улучшение кода , чтобы избежать сила-разворачивает попытаться сделать это: ', если позволить currentGraphicsContext = UIGraphicsGetCurrentContext() { currentGraphicsContext.setFillColor (color.cgColor) currentGraphicsContext.fill (CGRect (х: 0, Y: 0, ширина: 1, высота : 1)) } ' Плюс добавление' layer.masksToBounds = true' для сохранения функциональности 'layer.cornerRadius' –
Кажется здесь никто не упоминал об использовании ключа наблюдения Значение еще, но это anoth подход.
Причина для этого вместо того, чтобы выбирать другие ответы здесь, вам не нужно постоянно создавать новые изображения и не заниматься вторичными эффектами назначения изображений кнопкам (например, эффекты cornerRadius).
Но вам нужно создать класс для наблюдателя, который будет отвечать за сохранение разных цветов фона и применение их в методе observeValue()
.
public class ButtonHighlighterObserver: NSObject {
var observedButton:UIButton? = nil
var backgroundColor: UIColor = UIColor.white
var backgroundHighlightColor: UIColor = UIColor.gray
public override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
// Perform background color changes when highlight state change is observed
if keyPath == "highlighted", object as? UIButton === observedButton {
observedButton!.backgroundColor = observedButton!.isHighlighted ? self.backgroundHighlightColor : self.backgroundColor
}
}
}
Тогда все, что вам нужно сделать, это управлять addObserver/removeObserver во время работы:
// Add observer to button's highlighted value
button.addObserver(anObserver, forKeyPath: "highlighted", options: [.new], context: nil)
anObserver.observedButton = button
// ...
// And at deinit time, be sure you remove the observer again
anObserver.observedButton?.removeObserver(item, forKeyPath: "highlighted")
anObserver.observedButton = nil
- 1. Изменить UIButton backgroundColor на UIControlState.Highlighted?
- 2. Как установить цвет фона UIButton по состоянию
- 3. Переопределение UIButton setAttributedTitle: forState:
- 4. Как изменить цвет фона UIButton в Monotouch
- 5. Невозможно установить цвет фона UIButton, если выбрано?
- 6. Установить цвет фона на UIButton при отключении?
- 7. Как установить цвет внутри UIButton (а не цвет фона)
- 8. UIButton query in swift IOS
- 9. Установить цвет текста UIButton
- 10. Как анимировать цвет фона UIButton
- 11. UIButton setTitle forState не работает
- 12. Swift: как подклассы UIButton?
- 13. Установить цвет фона заголовка навигатора (swift)
- 14. UIButton -setTitle: forState: не работает
- 15. Как установить цвет фона фона?
- 16. Как установить цвет фона стека?
- 17. UIButton setAttributedTitle: forState: Not Showing
- 18. Удалить UIButton Programmatically in swift
- 19. Как установить цвет текста заголовка UIButton?
- 20. Swift - Изменение цвета фона прозрачного
- 21. iOS: TableView in nib - установить цвет фона
- 22. Установить цвет фона на MoreNavigationsController Swift 2
- 23. UIButton не меняет цвет текста при нажатии
- 24. Как установить цвет фона?
- 25. UIButton in PaintCode (Swift)
- 26. UIButton Animation in Swift
- 27. Цвет фона UIButton для выделенного/выбранного государственного вопроса
- 28. UIButton setTitle: longTitle forState: контрактная строка заголовка
- 29. Цвет фона ContentView Swift
- 30. Как удалить выбранный цвет фона UIButton?
Проверить этот пост https://somethingaboutios.wordpress.com/2016/02/09/uibutton-backgroundcolor-for-uicontrolstatesВыбранный/пример Swift в конце сообщения. –