长按手势识别器中的问题

时间:2017-06-16 18:38:24

标签: xcode swift3

我在Xcode的长按手势识别器中遇到问题,同时将其应用于录制音频的按钮

let longPress = UILongPressGestureRecognizer(target: self, action: "startRecording:")
    longPress.minimumPressDuration=0
    view.addGestureRecognizer(longPress)
    blabButtonPressed.addGestureRecognizer(longPress)



    func startRecording(press:UILongPressGestureRecognizer){


        if press.state == .began{
            recorder.record(forDuration: 8)


        }
        else if press.state == .ended{
            recorder.pause()

        }

    }

它给了我

  

无法识别的选择器发送到实例0x100d0a790   2017-06-16 23:49:43.990785 + 0530 blabby [451:102183] ***因未捕获的异常'NSInvalidArgumentException'终止应用

在我运行

时单击手机上的那个按钮

1 个答案:

答案 0 :(得分:0)

action参数中,您应该传递一个表示您要调用的方法的选择器。在Swift 3之前,您可以使用Selector("someMethod")语法执行此操作。使用此语法的缺点是您必须知道在Objective-C中调用Swift方法的内容,并且编译器不会检查您是否获得了正确的名称。这个方法是Swift:

func startRecording(press:UILongPressGestureRecognizer){

某些在Objective-C中未被称为startRecording:。它可以被桥接为startRecordingWithPress:或类似的东西(我不是这个领域的专家)。

但不要担心!

Swift 3变得非常聪明,你不再需要通过字符串传递选择器了!现在,您使用#selector(identifier)语法。这次,编译器为您检查有效性!您只需要编写方法名称​​仅,即startRecording

let longPress = UILongPressGestureRecognizer(
    target: self, action: #selector(startRecording))

只有当你有不同的方法重载时,你才需要关心参数。

相关问题