2017-11-25 10 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:]:インスタンスに送信された認識できないセレクタ

コントローラ内に存在するメソッドではなく、swiped:CardViewターゲット内にあるためと考えています。ジェスチャー自体を適用しながら、コントローラーをアクションに使用するように指定するにはどうすればいいですかのみ?

+0

私は自分の答えを更新しました。私は自分の答えを更新しました。**表示**の代わりに**自己**を使用する必要があります** –

+0

変更gesture = UISwipeGestureRecognizer(ターゲット:ビュー、アクション:#selector (_ :)) 〜 letジェスチャー= UISwipeGestureRecognizer(ターゲット:自己、アクション:#セレクタ(スワイプ(_ :)) –

答えて

1

変更この行:

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

へ:

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

説明

対象:UISwipeGestureRecognizerでがあなたのアクションメソッドは、自己我々を定義することによって、呼び出される場所を定義します私たちのスワイプジェスチャーアクションをあちこちに呼び出さなければならないと伝えていますUIViewControllerがCardViewからではありません

アクション:UISwipeGestureRecognizerのアクション:は、スワイプジェスチャーで呼び出されるメソッドを定義します。

+0

** selectorを**に書き込んでから、自動完全型スワイプメソッド名**のセレクタ(スワイプされた(:_))**または**#セレクタ(スワイプされた:)**正しい方法です** –

+0

私の答えを更新しました –

+0

ターゲットを 'self'に変更しました。それがセレクタのターゲットであり、ジェスチャ自体のターゲットではないことを認識しています(これは 'addGestureRecognizer:'を使って設定します)。ありがとう –

関連する問題