Swift:手势识别器无法识别的选择器发送到实例
Posted
技术标签:
【中文标题】Swift:手势识别器无法识别的选择器发送到实例【英文标题】:Swift: Gesture Recognizer unrecognized selector sent to instance 【发布时间】: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。) 【参考方案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:)))
【讨论】:
更多信息hackingwithswift.com/example-code/language/…以上是关于Swift:手势识别器无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章