【问题标题】:Swift: Gesture Recognizer unrecognized selector sent to instanceSwift:手势识别器无法识别的选择器发送到实例
【发布时间】:2016-12-12 23:06:41
【问题描述】:

我正在尝试在 XCode 中制作手势识别器,以便我可以点击我的 MKMapView 并执行一些操作。但是,每当我长按地图时,我都会收到“发送到实例的无法识别的选择器”。

这是我在 viewDidLoad 中的代码:

let gestureRecognizer = UILongPressGestureRecognizer(target: self, action: "handleTap:");
self.mapViewPlace.addGestureRecognizer(gestureRecognizer);

这是稍后的功能:

func handleTap(gestureReconizer: UILongPressGestureRecognizer) {

}

有什么想法吗?

【问题讨论】:

  • 请添加错误的完整措辞。错误通常会告诉你哪里出了问题,这就是它的用途。
  • 尝试将 action:"handleTap" 改为 action:@selector("handleTap"
  • Neo 很接近 - 它是 #selector,而不是 @selector。
  • 我不希望您发布的代码能够在 Swift 3 中编译。动作的新语法是 action:#selector(selector_name),正如@dfd 在他的回答中所描述的那样。
  • 是的。如果我可以添加评论,我们需要在这个网站上更好地区分 Swift 3 与否。 (那个。不是 Swift 2.x。)

标签: ios swift mkmapview


【解决方案1】:

请给 Neo 信用。您需要将语法更改为:

let gestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(handleTap)

旁注:对于 Swift,您的代码行末尾不需要分号。

【讨论】:

  • 这解决了问题,谢谢!出于某种原因,我在最新版本的 Swift 中找不到任何有关如何执行此操作的指南。也感谢 Neo 的帮助。
  • 这仍然适用于 swift 4,感谢您的回答和正确的语法!
【解决方案2】:

默认情况下,Swift 生成的代码仅对其他 Swift 代码可用,但如果您需要与 Objective-C 运行时(例如所有 UIKit)进行交互,您需要告诉 Swift 该做什么。

所以只需添加它并修改选择器声明:

@objc func handleTap(gestureReconizer: UILongPressGestureRecognizer) {
...
}
...
let swipe = UISwipeGestureRecognizer(target: self, action: #selector(handleTap(gestureReconizer:)))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
相关资源
最近更新 更多