在 UIView 中将 Traget 添加到 UIButton。收到错误“以 NSException 类型的未捕获异常终止”

Posted

技术标签:

【中文标题】在 UIView 中将 Traget 添加到 UIButton。收到错误“以 NSException 类型的未捕获异常终止”【英文标题】:addTraget to UIButton in UIView. getting error "terminating with uncaught exception of type NSException" 【发布时间】:2018-11-21 19:12:15 【问题描述】:

我有一个 UIView 类,在里面我有一个 UIButton,当点击它应该打开一个 UIViewController 类。但是,每次单击它时,我都会在 AppDelegate - 线程 1:信号 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)

【问题讨论】:

覆盖 func viewDidAppear(_ animated: Bool) super.viewDidAppear(animated) let width = self.view.frame.size.width let height = self.view.frame.size.height let angleView = AngleView(frame: CGRect(x: self.view.frame.size.width/2 - width/2, y: self.view.frame.size.height/2 - height/2, width: width, height: height )) self.view.addSubview(angleView) 完整的错误信息是什么?你是let loginController = LoginController() 是创建LoginViewController 实例的好方法吗?它有故事板/Xib 吗? 【参考方案1】:

问题在于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)

【讨论】:

以上是关于在 UIView 中将 Traget 添加到 UIButton。收到错误“以 NSException 类型的未捕获异常终止”的主要内容,如果未能解决你的问题,请参考以下文章

在哪个观点周期中将子视图添加到 UIView 子类的通用“经验法则”是啥?

在选择器中将子视图添加到主 uiview

在 UIView 中将 tapGestureRecognizer 添加到 UIImageView 并通过协议调用方法

在 Swift 中将多个 UIButton 添加到多个 UIView

如何在 ios7 中将 UIView 对象添加到 self.view.window?

如何在 iOS 中将 UIView 添加到 UIScrollView 中(具有动态内容的视图)