안녕하세요!
이번 글에서는 TableView 또는 CollectionView 를 사용함에 있어
이상하게 didSelect 관련 함수가 정상적으로 작동하지 않을 때 확인해보아야 할 사항에 대하여
간략히 설명드리겠습니다! 0_0
1. Delegate 를 설정해 주었나?
didSelect 는 각 컨트롤의 Delegate 프로토콜의 함수이므로 사용하고자 하는 뷰 단에 Delegate 를 설정해 주어야 합니다. 기본적인 것이라도 가끔 실수로 빠뜨리는 경우가 있어 혹시 설정은 했는지 한 번 확인해보는 것이 좋습니다!
Delegate 를 설정하지 않은 경우에는 다른 Delegate 함수들도 작동하지 않으며
아무리 눌러도 반응이 없기 때문에 금방 찾을 수 있는 실수입니다.
2. 뷰에 Tap 제스처가 사용되어 있나?
뷰 컨트롤러 안에 여러 가지의 커스텀 뷰를 활용한다던가 제스처 등이 사용됨으로써 발생할 수 있는 실수입니다.
다른 Delegate 함수들은 정상적으로 움직이는데 didSelect 만 이상하게 정상적으로 움직이지 않을 때 의심해볼 필요가 있습니다.
또한 해당 상황인 경우는 셀을 롱 클릭을 진하게 하면 작동하는 모습을 보실 수 있습니다.
위와 같은 현상이 발생한다면 재빠르게 Tap 제스처가 사용되고 있지 않은가 확인해보시길 바랍니다!
그러면 어떻게 해결할 수 있을까?
Tap 제스처가 있는 경우, 기존에 일어나고 있는 touch이벤트들을 취소시키는 속성인
cancelsTouchesInView (default = true) 영향으로 didSelct 가 작동하지 않는 것인데
이 속성을 cancelsTouchesInView = false 로 설정해 주면 해결됩니다!
그 이외의 방법으로 didSelect 를 사용하지 않고 셀에 버튼을 추가하는 것도 하나의 방법이 되겠네요 ^^
https://developer.apple.com/documentation/uikit/uigesturerecognizer/1624218-cancelstouchesinview
Apple Developer Documentation
developer.apple.com
마무리
이번 글에서는 작업하다가 간혹 실수로 인하여 발생할 수 있는 이슈에 대해 정보를 공유드렸습니다!
많이 도움이 되었으면 좋겠습니다!
감사합니다!
환경
Xcode 12.3.1
Swift 5
'Swift > 이슈 대응' 카테고리의 다른 글
[Swift] Realm 복수 쿼리로 데이터 추출하기 (0) | 2021.12.22 |
---|---|
[Swift] Swift UIAlertController를 외부 클릭으로 닫기 (0) | 2020.05.22 |
[Swift] iPad 멀티태스킹 대응 시 확인할 것 (4) | 2020.04.14 |