Swift4-UIButton在UIView中使用addTarget错误

时间:2019-01-19 09:09:03

标签: swift uibutton

这是UIVIew中required init中具有addTarget的代码

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    hiddenButton = self.viewWithTag(9000) as? UIButton
    hiddenButton.addTarget(self, action: "hiddenCameraAction:", for: .touchUpInside)
}

这是我的选择功能

func hiddenCameraAction(_ sender: Any)  {
    //Do something
}

当我单击UIView中的按钮时,应用程序因错误而崩溃:

  

TeachSystem [27065:8131674] *由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“-[TeachSystem.CameraView hiddenCameraAction:]:无法识别的选择器已发送至实例0x121d11050”   * 第一个调用堆栈:   (0x1ee830ec4 0x1eda01a40 0x1ee749c24 0x21bb74558 0x1ee8367dc 0x1ee83848c 0x21bb48454 0x21b5d5d0c 0x21b5d602c 0x21b5d502c 0x21bb81bac 0x21bb82e10 0x21bb6210c 0x21bc30f68 0x21bc33960 0x21bc2c450 0x1ee7c11f0 0x1ee7c1170 0x1ee7c0a54 0x1ee7bb920 0x1ee7bb1f0 0x1f0a34584 0x21bb46d40 0x105039f40 0x1ee27abb4)   libc ++ abi.dylib:以类型为NSException的未捕获异常终止

问题:如何解决此错误?

3 个答案:

答案 0 :(得分:1)

操作应定义为9000 x 6000 pixels but at 1200 dpi

#selector

答案 1 :(得分:1)

您需要做的就是将字符串放在括号中。

action: ("hiddenCameraAction:")

...但是,这是不赞成使用的方式来实现您需要实现的目标。


我建议您开始使用选择器,该选择器更安全,因为编译器会立即为您提供错误,并且代码不会以错误的方法名称或任何其他方式运行。

语法为:#selector(method(externalParameter:))


enter image description here

...您可以开始输入内容,编译器会建议您可以放入哪种Objective-C方法

action: #selector(hiddenCameraAction(_:))

答案 2 :(得分:0)

动作应定义为#selector,并且函数应具有@objc 推断。

hiddenButton.addTarget(self, action: #selector(hiddenCameraAction(_:)), for: .touchUpInside)

hiddenCameraAction 功能

@objc func hiddenCameraAction(_ sender: Any)  {
    //Do something
}

@objc推论允许Objective-C运行时可以访问hiddenCameraAction方法。