InterfaceBuilderでGestureRecognizerをViewとひもづける


ちょくちょくどうやるのかわからなくなるので覚え書きしておきます。

イベントメソッドを宣言

まず、Gestureイベントが発生した時に呼ばれるメソッドを宣言。

@IBAction private func didTapAttachmentImageView() {
  // 何らかの処理
}

Interface Builderでの操作

  • 監視したいイベントのGesture Recognizerをドラッグ&ドロップ(場所は適当で良い)
  • Objectsの一覧にGesture Recognizerが追加される
  • Objectsの一覧からGesture Recognizerを選択し、Connections Inspectorを選択

  • Sent Actionsのselectorの右にある◯から線を引っ張り、File's Ownerでドロップ

  • IBActionで宣言されたメソッドがポップアップ表示されるので、呼びたいメソッドを選択

  • Gesture RecognizerとIBActionメソッドがひもづく

  • Referencing Outlet CollectionsのNew Referencing Outlet Collectionの右にある◯から線を引っ張り、イベントを監視したいViewでドロップ

  • ポップアップにgestureRecognizersと表示されるので選択

  • Gesture RecognizerとViewがひもづく

  • ViewがUILabel、UIImageViewなどは、isUserInteractionEnabledプロパティがデフォルトでfalseなのでtrueにしておく。そうしないとGestureイベントが発生しない

    • ViewのAttributes Inspectorを選択し、以下のようにチェックを入れる

これでOK!

ちなみにReferencing Outlet Collectionsは複数のViewをひもづけられますが、実際は最後にひもづけたViewでのみIBActionメソッドが呼ばれるようです・・・つまり、監視したいViewの数だけGesture Recognizerを用意する必要があります。