addTraget для UIButton в UIView.Получение ошибки «Завершается с необработанным исключением типа NSException» - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть класс UIView, и внутри него у меня есть UIButton, и при нажатии на него он должен открыть класс UIViewController.Однако каждый раз, когда я нажимаю на нее, я получаю сообщение об ошибке в AppDelegate - Thread 1: signal SIGABRT.терминал: завершается с неисследованным исключением типа NSException.

lazy var signupButton: UIButton = {
    let button = UIButton(type: .system)
    button.setTitle("Sign me up", for: .normal)
    button.setTitleColor(UIColor.blue, for: .normal)
    button.backgroundColor = UIColor.white
    button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 17)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.addTarget(self, action: #selector(handleLogin(vc:)), for: .touchUpInside)
    return button
}()

@objc func handleLogin(vc: UIViewController) {
    let loginController = LoginController()
    vc.present(loginController, animated: true, completion: nil)
}

1 Ответ

0 голосов
/ 21 ноября 2018

Проблема с параметром func handleLogin.Он настроен на ожидание экземпляра UIViewController, но на самом деле он будет отправителем селектора, который в данном случае будет UIButton.

Вам необходимо обновить его до следующего:

@objc func handleLogin(sender: UIButton) {
   let loginController = LoginController()
   present(loginController, animated: true, completion: nil)
}

Вы можете сделать это поочередно, поскольку вам вообще не нужен параметр sender.

button.addTarget(self, action: #selector(handleLogin), for: .touchUpInside)
    return button

@objc func handleLogin() {
   let loginController = LoginController()
   present(loginController, animated: true, completion: nil)
}
...