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 = [] 이런식으로 사용하면 안된다는 것.

꼭 기억합시다!!