Swift 3:无法识别的选择器发送到实例Xcode 8

Rau*_*aul 12 uigesturerecognizer ios swift swift3

我已经以编程方式创建了一个UIView并添加UIPanGestureRecognizer到它:

class ViewController: UIViewController{
    var preludeView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        initViews()
        createConstrants()

        let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: Selector(("handleTap:")))
        preludeView.addGestureRecognizer(panGestureRecognizer)
    }

    func handleTap(recognizer: UIPanGestureRecognizer) {
        print("WORKING!!!!")
    }

    func initViews() {
        ...
    }

    func createConstrants() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我触摸视图时,Xcode会抛出一个错误:

2016-07-13 09:24:29.918 Draft_Hypa_02 [661:83024] - [Draft_Hypa_02.ViewController handleTap:]:无法识别的选择器发送到实例0x17d94a10 2016-07-13 09:24:29.921 Draft_Hypa_02 [661:83024] *终止应用由于未捕获的异常'NSInvalidArgumentException',原因是: ' - [Draft_Hypa_02.ViewController handleTap:]:无法识别的选择发送到实例0x17d94a10'*第一掷调用堆栈:(0x249cf91b 0x2416ae17 0x249d52b5 0x249d2ee1 0x248fe238 0x294ae9eb 0x290e984f 0x28f7aff1 0x294afd4f 0x28f3ba57 0x28f38017 0x28f78ec9 0x28f7867b 0x28f49125 0x28f476d3 0x24991dff 0x249919ed 0x2498fd5b 0x248df229 0x248df015 0x25ecfac9 0x28fb1189 0x93144 0x24587873)libc ++ abi.dylib:以NSException类型的未捕获异常终止

但是,如果我删除函数中的handleTap参数并删除冒号Selector(("handleTap:")),一切正常!

已经花了一天时间尝试解决这个问题,非常感谢您的帮助!

Nir*_*v D 30

如果你使用swift3,你selector应该是这样的

#selector(self.handleTap(recognizer:))
Run Code Online (Sandbox Code Playgroud)

  • @Forze你还需要在方法第一个参数之前添加下划线.`func handleTap(_ Recognizer:UIPanGestureRecognizer){` (3认同)

Mah*_*a Y 6

你应该以不同的方式写这个陈述.使用以下行

让panGestureRecognizer = UIPanGestureRecognizer(target:self,action:#selector(ViewController.handleTap(_ :)))

代替

让panGestureRecognizer = UIPanGestureRecognizer(target:self,action:Selector(("handleTap:")))

新方法

让panGestureRecognizer = UIPanGestureRecognizer(target:self,action:#selector(YourViewController.handleTap(_ :)))