Swift:尝试使用点按手势时出现“无法识别的选择器发送到实例”错误

时间:2017-09-30 20:31:47

标签: ios swift error-handling uigesturerecognizer

我收到错误

  

***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [App.DetailController tap]:无法识别的选择器发送到实例0x109803800'

我的名为'DetailController'的视图控制器有一个小的imageView,当用户点击图像时,我希望图像放大到全屏,然后再次点击返回到全屏前的默认图像尺寸。

问题是我的应用在点击imageView时崩溃了。

viewDidLoad中

override func viewDidLoad() {
    super.viewDidLoad()

    iconImage.isUserInteractionEnabled = true
    let tapGesture = UITapGestureRecognizer(target: self, action: Selector(("tap")))
    iconImage.addGestureRecognizer(tapGesture)
}

func tap() {

    let screenSize: CGRect = UIScreen.main.bounds
    let screenWidth = screenSize.width
    let screenHeight = screenSize.height
    iconImage.frame = CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight)
}

1 个答案:

答案 0 :(得分:1)

不要使用Selector()。使用#selector()表单。编译器能够检查与该表单匹配的方法。

对于手势识别器,选择器应该有1个参数:手势识别器本身:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tap(_:)))

你的功能看起来像这样

@IBAction func tap(_ gesutureRecognizer: UITapGestureRecognizer) {
}

对于UIViewController的函数,您不应该在函数上使用@objc限定符,因为UIViewController是Objective-C对象。