Создание кнопки из подкласса, не отображаемой в поле зрения - PullRequest
0 голосов
/ 29 января 2019

Будет ли кто-нибудь , пожалуйста, объяснить, почему следующий код не размещает кнопку в моем представлении?

Класс кнопки

class CustomButton: UIButton {

    var button = UIButton()

    func makeButton() {
        button.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
        button.center = self.center
        button.setTitle("PRESS", for: .normal)
        button.backgroundColor = UIColor.red
        button.addTarget(self, action: #selector(ViewController.buttonPressed), for: .touchUpInside)
        self.addSubview(button)
    }
}

Основной класс

class ViewController: UIViewController {

    var button: CustomButton?

    override func viewDidLoad() {
        super.viewDidLoad()

        button?.makeButton()
    }

    @objc func buttonPressed() {
        print("woohoo!")
    }
}

1 Ответ

0 голосов
/ 29 января 2019

Вам необходимо полностью переделать класс CustomButton.Он не должен иметь свойства button.Он должен инициализировать себя.

И настройка цели принадлежит контроллеру представления, а не классу кнопок.

Обновленный код кнопки:

class CustomButton: UIButton {
    init() {
        super.init(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
        setTitle("PRESS", for: .normal)
        backgroundColor = UIColor.red
    }

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

Обновленный контроллер представления:

class ViewController: UIViewController {
    var button = CustomButton()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(button)
        button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
    }

    @objc func buttonPressed() {
        print("woohoo!")
    }
}
...