В UIViewController (мой BaseViewController ниже) я добавляю подпредставление всплывающего диалогового окна (из другого класса NotifDialog), содержащего кнопку.
Эта кнопка должна скрывать всплывающее диалоговое окно при касании.
Моя проблема в том, что либо кнопка не обнаруживает касание, либо выдает «нераспознанный селектор, отправленный экземпляру»
class NotifDialog: NSObject {
var dialogView: UIView!
superView = controller.view
dialogView = UIView()
superView?.addSubview(dialogView)
dialogView.translatesAutoresizingMaskIntoConstraints = false
let dialogViewWidth = BaseViewController.screenWidth * 0.66
let dialogViewHeight = BaseViewController.screenHeight * 0.45
dialogView.centerXAnchor.constraint(equalTo: (superView?.safeAreaLayoutGuide.centerXAnchor)!).isActive = true
dialogView.centerYAnchor.constraint(equalTo: (superView?.safeAreaLayoutGuide.centerYAnchor)!).isActive = true
dialogView.widthAnchor.constraint(equalToConstant: dialogViewWidth).isActive = true
dialogView.heightAnchor.constraint(equalToConstant: dialogViewHeight).isActive = true
let bClose = UIButton()
dialogView?.addSubview(bClose)
bClose.translatesAutoresizingMaskIntoConstraints = false
let bCloseWidth = dialogViewWidth * 0.5
bClose.centerXAnchor.constraint(equalTo: dialogView.safeAreaLayoutGuide.centerXAnchor).isActive = true
bClose.topAnchor.constraint(equalTo: dialogView.topAnchor, constant: 25).isActive = true
bClose.widthAnchor.constraint(equalToConstant: bCloseWidth).isActive = true
bClose.heightAnchor.constraint(equalToConstant: 25).isActive = true
//bClose.addTarget(controller, action:#selector(self.hide(_:)), for: .touchUpInside) -> touch not detected
//bClose.addTarget(self, action:#selector(self.closeDialog(_:)), for: .touchUpInside) -> throws error "unrecognized selector sent to instance"
}
func closeDialog(_ sender : UIButton) {
dialogView.isHidden = true
}
.
class BaseViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let topViewController :UIViewController = self.navigationController!.topViewController!
let dialog = NotifDialog()
dialog.loadCustomViewIntoController(controller: topViewController)
}
Установка моей кнопкиследующий способ делает его как не обнаруженное касание
bClose.addTarget(self, action:#selector(closeDialog(_:)), for: .touchUpInside)
Установка моей кнопки следующим образом обнаруживает касания, но выдает ошибку: «нераспознанный селектор отправлен на экземпляр»
bClose.addTarget(controller, action:#selector(closeDialog(_:)), for: .touchUpInside)
Наконец, ятакже попытался сделать мою функцию closeDialog статической.В этом случае он больше не падает, однако я не могу использовать dialogView в нем, так как этот var не является статическим.
Как скрыть диалог от прикосновения к этой кнопке?