Swift: Пользовательский класс UIButton в сенсорном событии контроллера просмотра не запускается? - PullRequest
0 голосов
/ 18 марта 2019

Я создал собственный класс UIButton следующим образом:

class CustomButton: UIButton
{
    required init(frame: CGRect, title: String, alignment: NSTextAlignment)
    {
        super.init(frame: frame)

        // Set properties

//        self.addTarget(self,
//                       action: #selector(touchCancel),
//                       for: .touchUpInside)
    }

    required init?(coder aDecoder: NSCoder)
    {
        fatalError("init(coder:) has not been implemented")
    }

//    @objc fileprivate func touchCancel()
//    {
//        print("TOUCHED")
//    }
}

В моем основном UIViewController есть следующая реализация:

class MainViewController: UIViewController
{   
    fileprivate var customBtn: CustomButton {
        let frame = CGRect(x: 48.0,
                           y: 177.0,
                           width: 80.0,
                           height: 40.0)
        let custom = CustomButton(frame: frame,
                                  title: "Test",
                                  alignment: NSTextAlignment.right)
        return custom
    }

    override func viewDidLoad()
    {
        super.viewDidLoad()

        view.addSubView(customBtn)

        customBtn.addTarget(self,
                            action: #selector(touchCancel),
                            for: .touchUpInside)
    }

    @objc public func touchCancel()
    {
        print("TOUCHED")
    }
}

Однако, добавление цели к customBtn в моем основном UIViewController не срабатывает. Как показано в классе CustomButton с закомментированным кодом, я могу добавить туда цель, которая вызывает срабатывание.

Мне просто интересно, почему определенную функцию в другом классе нельзя использовать для добавления в качестве цели в пользовательский UIButton? .... или, возможно, моя реализация неверна?

Спасибо!

1 Ответ

0 голосов
/ 18 марта 2019

Может потребоваться закрытие, а не вычисляемое свойство

lazy var customBtn: CustomButton = {
    let frame = CGRect(x: 48.0, y: 177.0, width: 80.0, height: 40.0)
    let custom = CustomButton(frame: frame, title: "Test",alignment: NSTextAlignment.right)
    return custom
}()

Здесь внутри MainViewController

customBtn.addTarget(self,
                        action: #selector(touchCancel),
                        for: .touchUpInside)

вы добавляете цель к вновь созданному экземпляру, а не к тому, который вы добавили в качестве подпредставления, и это основное различие между вашей реализацией (вычисляемое свойство) и закрытием

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