[Swift] cancelsTouchesInView가 뭐죠

봄바야·2022년 1월 7일
1

UI debugging

목록 보기
2/2

collectionView의 cell을 클릭했는데 아예 self.viewModel.goDetail()도 안불렸..

collectionView.rx.itemSelected
	.subscribe(onNext:{ [weak self] indexPath in
    		guard let self = self else { return }
            self.viewModel.goDetail(indexPath: indexPath)
     }).disposed(by: cell.eventBag)

왜그런지 보니,,
키보드가 올라와있을 때 바탕 클릭하면 키보드를 숨기려고

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(hideKeyboard))
tapGesture.cancelsTouchesInView = true
tableView.addGestureRecognizer(tapGesture)

이런 코드를 추가했었다,,
근데 cancelsTouchesInView를 true로 해서 한번 클릭하면 안먹고 두손가락으로 (two finger) 클릭하면 먹더라구요
cancelsTouchesInView를 false 수정해주었습니다


cancelsTouchesInView

👉 gesture가 인식될 때 touch가 view에 전달되는지에 영향을 미치는 bool 값!
그래서 true 하면 view에 전달이 안되고 false 해야 전달이 됐나 봅니다

Discussion

이 속성이 true(기본값)이고 수신자가 제스처를 인식하면 보류 중인 해당 제스처의 터치가 뷰에 전달되지 않고 이전에 전달된 터치가 뷰에 전송된 touchCancelled(_:with:) 메시지를 통해 취소됩니다.
제스처 인식기가 제스처를 인식하지 못하거나 이 속성 값이 false인 경우 뷰는 멀티 터치 시퀀스의 모든 터치를 수신합니다.

또 하나 알아가네요,,


+

UIGestureRecognizer 하위에 있는거라 UIScrollView에서는 못 쓰는 것 같습니다..

0개의 댓글