在 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 中将 tapGestureRecognizer 添加到 UIImageView 并通过协议调用方法
在 Swift 中将多个 UIButton 添加到多个 UIView