2017-11-25 75 views
1

我试图在我的视图控制器中注册一个方法作为UISwipeGestureRecognizer的操作。目标视图是我用UIView子类构建的自定义视图,因为这是我想要滑动的目标。我遇到的问题是我不知道如何将动作设置为UIViewController中的方法。当我将手势拖放到界面构建器中的视图时,我可以做到这一点,然后将操作拖出到控制器。选择器找不到实例方法

func swiped(_ sender: UISwipeGestureRecognizer) { 
} 

func addGestureToView(_ view: CardView) { 
    let gesture = UISwipeGestureRecognizer(target: view, action: Selector("swiped:")) 
    gesture.direction = .up 
    view.addGestureRecognizer(gesture) 
} 

我还试图用

let gesture = UISwipeGestureRecognizer(target: view, action: #selector(swiped(_:)))

这两种方法给我的以下异常:

终止应用程序由于未捕获的异常 'NSInvalidArgumentException',原因:' - [testapp.CardView swiped:]:发送到实例的无法识别的选择器

我认为这是因为它正在寻找CardView目标中的swiped:,而不是控制器中存在的方法。我如何指定我希望它使用Controller作为动作,同时将手势本身只有应用于CardView

+0

嗨@Johnathon Sullinger请再次看到我的答案我已更新我的答案,使用需要使用**自**而不是**查看** –

+0

更改让手势= UISwipeGestureRecognizer(target:view,action:#selector( (_ :))) 到 let gesture = UISwipeGestureRecognizer(target:self,action:#selector(swiped(_ :))) –

回答

1

改变这一行:

let gesture = UISwipeGestureRecognizer(target: view, action: Selector("swiped:")) 

到:

let gesture = UISwipeGestureRecognizer(target: self, action: #selector(swiped(_:))) 

说明

目标:在UISwipeGestureRecognizer定义了你的操作方法将被调用,通过定义自我,我们告诉我们我们的滑动手势动作应该被称为来回m UIViewcontroller not from CardView

action: in UISwipeGestureRecognizer定义了应该在滑动手势上调用的方法。

+0

请写**#选择器(**,然后使用自动完成类型swiped方法名称它会写** **选择器(swiped(:_))**或**#选择器(swiped:)** **这是正确的方式 –

+0

已更新我的回答 –

+0

将目标更改为'self'工作。 t意识到这是选择器的目标,而不是手势本身的目标(这是使用'addGestureRecognizer:'设置的。谢谢 –

相关问题