回答編集履歴

1 リンクの追加

idonotknow

idonotknow score 74

2017/09/16 14:44  投稿

基本的には、ボタンに対してfunc longPress()のような用意したメソッドをaddGestureRecognizerで紐づけることになると思います。
一例ですが、今回はボタンとラベルにタグを付けて
ボタンAのタグ→ 1, ボタンBのタグ→ 2, ...
ラベルAのタグ→ 101, ボタンBのタグ→ 102, ...
という対応を作ってみました。
[LongTapExample](https://github.com/murakamiii/LongTapExample/blob/master/longTapExample/ViewController.swift)  
```Swift
   override func viewDidLoad() {
       super.viewDidLoad()
       
       self.view.subviews.forEach { (view) in
           // ボタンとラベルが混在している
           guard let view = view as? UIButton else { return }
           let longTapGesture: UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(longPress(gesture:)))
           view.addGestureRecognizer(longTapGesture)
       }
   }
   // ボタンをロングタップした時に呼ばれる処理
   func longPress(gesture: UILongPressGestureRecognizer) {
       if gesture.state != .began {
           return
       }
       
       // ボタンのtag + 100 = 対応するラベルのtag
       guard let btn: UIButton = gesture.view as? UIButton else { return }
       let lbltag: Int = btn.tag + 100
       if let lbl = self.view.viewWithTag(lbltag) as? UILabel {
           lbl.isHidden = true
       }
   }
```
viewDidLoadの中でボタンに対してlongPress(gesture:)メソッドを紐づけています。longPress(gesture:)メソッドでは呼ばれたgestureのview?プロパティのタグ+100のviewを取得し、非表示にしています。今回はUILabel用いましたが、もちろんUIViewであってもtagを設定すれば上記のようにできると思います。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る