UITapGestureRecognizer란 Gesture Recognizer의 하위 클래스 중 하나로,
Recognizes tap gestures, including double-tap or multiple-tap
라고 합니다
한 번 터치 및 여러 번 터치를 인식해주는 클래스라고 생각하시면 됩니다

버튼이 아닌 view가 눌렸음을 인지해야 하는 상황이었고,
view는 커스텀 뷰로 재활용하고 있었기 때문에
몇 번째 뷰가 클릭 되었는지, 눌렸는지 아닌지의 여부를 알고싶었답니다
첫 번째로 UITapGestureRecognizer를 추가해주는 일인데요
let hashtagView = HashtagView()
let genreTapGesture = UITapGestureRecognizer(target: self, action: #selector(genreTapMethod))
hashtagView.addGestureRecognizer(genreTapGesture)
@objc func genreTapMethod(sender: GenreTapGestureRecognizer) {
print(sender)
}
특정 view에 UITapGestureRecognizer를 생성해서 추가해주면 됩니다
action에 들어갈 함수는 tap되었을 때 실행할 함수이고
잘 되는지 확인해보기 위해서 print문을 찍어보았어요
하지만 제가 원하는 것은 현재 tap된 view의 정보들이었기 때문에
파라미터로 전달해주면 되겠다는 생각을 하게 되었습니다
구글링의 결과로
let hashtagView = HashtagView()
let genreTapGesture = UITapGestureRecognizer(target: self, action: #selector(genreTapMethod))
genreTapGesture.text = "안녕하세요"
hashtagView.addGestureRecognizer(genreTapGesture)
//genreTapMethod
@objc func genreTapMethod(sender: GenreTapGestureRecognizer) {
print(sender.text)
}
이런식으로 변수를 사용하면 된다는 글을 보았으나
될리가 없습니다 ..
genreTapGesture에는 text가 없으니까 …
포인트는 UITapGestureRecognizer를 상속하는 custom class를 만들어주는 일
class GenreTapGestureRecognizer: UITapGestureRecognizer {
var index: Int?
var hashtagView: HashtagView?
var isTouched: Bool? = false
func setIsTouched() {
self.isTouched?.toggle()
}
}
이런식으로 class를 만들어주고
let genreTapGesture = GenreTapGestureRecognizer(target: self, action: #selector(genreTapMethod))
genreTapGesture.index = index
genreTapGesture.hashtagView = hashtagView
사용해주면 됩니다 !
@objc func genreTapMethod(sender: GenreTapGestureRecognizer) {
print(sender.index)
}
하지만 collectionView를 사용하면 쉽게 구현 가능하다는 사실 !