Непосредственной причиной сбоя является следующая строка:
deal3Card.addTarget(self,
action: #selector(ViewController.touchDeal3Card), for: .touchUpInside)
Цель self
неверна.Вы хотите отправить это сообщение контроллеру представления, который реализует touchDeal3Card
.Но в вашем коде self
- это кнопка, которой нет.
Самое простое решение, учитывая построенную вами архитектуру, - заменить self
на nil
.Это заставит touchDeal3Card
просочиться вверх по цепочке респондента и добраться до контроллера представления.
Сказав , что , я бы предположил, что сама архитектура неверна.Контроллер представления должен контролировать представления;взгляды не должны контролировать себя.Контроллер вида, а не вид, должен создавать кнопку.Это хорошо подтверждается тем фактом, что этот код является абсолютно неправильным:
override func draw(_ rect: CGRect) {
setDeal3Card()
}
Это полное неправильное использование draw
и может привести к ужасным неприятностям.Единственное, что вы должны сделать в draw
- это подождать.Добавление подпредставлений в draw
настолько неправильно, насколько это возможно.