Я пытаюсь получить доступ к параметру enum для пользовательского класса UIButton, но не могу заставить его работать между кодом #selector & @objc. Есть идеи?
Цель этого заключается в том, чтобы у меня были различные стилизованные кнопки, которые выглядят по-разному для пользователя в зависимости от взаимодействия. Я могу отформатировать и т. Д., Используя заданное мной перечисление, но не могу понять, как получить параметр перечисления ButtonStyle в часть кода @objc.
Я создаю экземпляр экземпляра пользовательского класса кнопок в viewController, вызывая:
let button = ColorButton(title: "A Button", style: .action)
Код для пользовательского класса выглядит следующим образом:
import UIKit
enum ButtonStyle {
case action
case optional
}
var buttonStyleToUse = ButtonStyle.action
class ColorButton: UIButton {
// MARK: GESTURE RESPONDERS
@objc fileprivate func touchDownOnButton()
{
updateButtonColors(forStyle: buttonStyleToUse)
}
@objc fileprivate func touchOnButtonCancelled()
{
setUpButtonColors(forStyle: buttonStyleToUse)
}
// MARK: INIT
override init(frame: CGRect) {
super.init(frame: frame)
}
init(title: String, style: ButtonStyle) {
super.init(frame: .zero)
// Set button title parameters
setTitle(title, for: .normal)
titleLabel?.font = UIFont.boldSystemFont(ofSize: 17.0)
// Set button later parameters
layer.cornerRadius = 10
layer.masksToBounds = true
// Set button height
height(50)
// Update class variable to sender
buttonStyleToUse = style
// Perform initial button setup based on button style
setUpButtonColors(forStyle: buttonStyleToUse)
// Add interaction targets
addTarget(self, action: #selector(touchDownOnButton), for: .touchDown)
addTarget(self, action: #selector(touchDownOnButton), for: .touchDragEnter)
addTarget(self, action: #selector(touchOnButtonCancelled), for: .touchDragExit)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: METHODS
func setUpButtonColors(forStyle: ButtonStyle){
switch forStyle {
case .action:
setTitleColor(.white, for: .normal)
// Set button background colors
backgroundColor = actionButtonColor
default: //Optional and others
setTitleColor(.black, for: .normal)
// Set button background colors
backgroundColor = optionalButtonColor
}
}
func updateButtonColors(forStyle: ButtonStyle){
switch forStyle {
case .action:
setTitleColor(.white, for: .normal)
// Set button background colors
backgroundColor = tappedActionButtonColor
default: //Optional and others
setTitleColor(.black, for: .normal)
// Set button background colors
backgroundColor = tappedOptionalButtonColor
}
}
}