ios - Swift:尝试使用点击手势时出现 "Unrecognized selector sent to instance"错误

标签 ios swift error-handling uigesturerecognizer

我得到的错误

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[App.DetailController tap]: unrecognized selector sent to instance 0x109803800'

我的名为“DetailController”的 View Controller 有一个小的 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)
}

最佳答案

不要使用 Selector()。使用 #selector() 形式。编译器能够检查具有该形式的匹配方法。

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

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

你的函数看起来像这样

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

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

关于ios - Swift:尝试使用点击手势时出现 "Unrecognized selector sent to instance"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46506797/

相关文章:

ios - NSLayoutAttribute topMargin 和 BottomMargin (边距约束)在 iOS 编程布局中不起作用

ios - NSSet如何确保其对象的唯一性?

json - 如何调用以 json 字符串形式传递的函数

Swift 闭包返回空值

error-handling - Rust:从标准输入读取和映射行并处理不同的错误类型

php - 是否可以隐藏/不显示解析错误?

sql-server - SQL查询-批量插入后无法将varchar转换为float

ios - 如何从特定的 Core Data 父实体 ID 获取所有到多个项目

iphone - 在 iPad 上更新应用程序时出现问题

html - 有没有人在使用 IOS 8.3 使用内容为真棒字体分配颜色时遇到问题?