Пользовательская конфигурация класса UIButton с использованием перечислений, не работающих с #selector & @objc - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь получить доступ к параметру 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

        }

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...