iOS 개발/UIKit
[UIGestureRecognizer] tableview와 함께 사용하기
스닥
2021. 11. 29. 16:51
테이블 뷰는 기본적으로 scroll을 사용합니다.
그래서 tableView에 다른 제스처 액션을 추가하면, 작동하지 않습니다.
자세한 이유는
2021.11.17 - [iOS 개발] - [GestureRecognizer] Gesture 잘 사용하기 - 동시에 여러 gesture 사용하기, 주의점
[GestureRecognizer] Gesture 잘 사용하기 - 동시에 여러 gesture 사용하기, 주의점
제스처를 사용하는 방법은 간단합니다. 자! 저는 지금부터 infoView라는 제가 만든 View에 왼쪽으로 Swipe했을 때 어떤 동작이 실행되도록 해보겠습니다!! 먼저 우리는 제스처 인식기를 만들어주어야
hasensprung.tistory.com
이곳에 열심히 적어두었으니 꼭 참고하시길 바랍니다!!
이런 방법으로 해결을 한 코드는 다음과 같습니다ㅎㅎ
extension ListTableViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
}
let swipe = UISwipeGestureRecognizer(target: self, action: #selector(backButtonPressed))
let calendarSwipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(dateFWButtonPressed))
let calendarSwipeRight = UISwipeGestureRecognizer(target: self, action: #selector(dateBWButtonPressed))
swipe.direction = .right
swipe.delegate = self
calendarSwipeLeft.direction = .left
calendarSwipeRight.direction = .right
self.listTableView.addGestureRecognizer(swipe)
self.calendarView.gestureRecognizers = [calendarSwipeLeft, calendarSwipeRight]
줄여서 이야기하자면, 여러 종류의 제스처 액션 인식기를 사용하기 위해서는
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool
delegate를 채택해서, 이 제스처 인식기가 여러 제스처를 모두 인식을 하게 해주는 함수의 리턴값을 True로 바꿔주면 됩니다.
또 addGeustreRecognizer과 같이 사용해야 하고, view.gestureRecognizers = [] 이런식으로 사용하면 안된다는 것.
꼭 기억합시다!!