Как вы меняете цвет кнопки UIB при нажатии на нее? - PullRequest
0 голосов
/ 24 февраля 2019

Мне интересно, как можно изменить цвет кнопки UIB при ее нажатии.По умолчанию кнопка UIB имеет блеклый синий цвет при нажатии.Как мне изменить это с блеклого на, например, фиолетовый, когда я нажимаю на него?Как мне сделать это в Swift 4?Есть ли какое-то свойство, которое я могу изменить?

Ответы [ 5 ]

0 голосов
/ 24 февраля 2019

Swift 4.2

используйте это расширение для кнопки:

extension UIButton {
  func setBackgroundColor(_ color: UIColor, forState controlState: UIControl.State) {
    let colorImage = UIGraphicsImageRenderer(size: CGSize(width: 1, height: 1)).image { _ in
      color.setFill()
      UIBezierPath(rect: CGRect(x: 0, y: 0, width: 1, height: 1)).fill()
    }
    setBackgroundImage(colorImage, for: controlState)
  }
}

и просто используйте:

override func viewDidLoad() {
        super.viewDidLoad()

        let button = UIButton()
        button.frame = CGRect(x: 150, y: 200, width: 200, height: 20)
        button.setBackgroundColor(.red, forState: .normal)
        button.setBackgroundColor(.blue, forState: .highlighted)

        view.addSubview(button)
    }

надеюсь, что это заставит вас улыбнуться:)

0 голосов
/ 24 февраля 2019

Используйте .backgroundColor для установки цвета;var button_isActive для нажатия кнопки, UIView.animate

 var button_isActive: Bool = false 

 @IBAction func btn_Button(_ sender: UIButton) {
    if button_isActive {
        UIView.animate(withDuration: 0.2) {
            sender.backgroundColor = UIColor.clear
        }
    } else {
        UIView.animate(withDuration: 0.2) {
            sender.backgroundColor = UIColor.purple
        }
    }
    button_isActive = !button_isActive
}
0 голосов
/ 24 февраля 2019

Используйте setTitleColor(_:for:), чтобы по-разному установить цвет заголовка (первый параметр) для состояния .normal и .highlighted (второй параметр).

См. https://developer.apple.com/documentation/uikit/uibutton/1623993-settitlecolor

0 голосов
/ 24 февраля 2019

Если вы хотите изменить UIButton цвет фона с помощью щелчка, вы можете просто использовать свойство backgroundColor, как показано ниже:

@IBAction func btnTapped(_ sender: UIButton) { //sender type should be UIButton
    sender.backgroundColor = UIColor.purple
}

и если вы хотите установить цвет заголовка при нажатии, вы можете использовать setTitleColor свойство, как показано ниже:

@IBAction func btnTapped(_ sender: UIButton) {
    sender.setTitleColor(UIColor.purple, for: .highlighted)
}
0 голосов
/ 24 февраля 2019

Я думаю, вы можете использовать функцию setBackgroundImage для архивирования:

button.setBackgroundImage(UIImage(named: "PURPLE_IMAGE"), for: .highlighted)

Вы можете установить изображение для highlighted, selected, disable ... и т.д.

Я знаю, что ваш вопрос заключается в том, чтобы изменить цвет фона подсветки, а не фоновое изображение, но, к сожалению, у него, похоже, нет прямого способа сделать это.Поэтому моя работа заключается в том, чтобы программно создать изображение этого цвета для того же эффекта (вы можете добавить его в расширение UIImage):

let rect = CGRect(point: .zero, size: CGSize(width: 1, height: 1))
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
let context = UIGraphicsGetCurrentContext()
context!.setFillColor(color.cgColor)
context!.fill(rect)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...