Swift/이슈 대응

[Swift] TableView 또는 CollectionView 의 didSelect 가 정상적으로 작동하지 않을 때 확인 사항

언클린 2022. 3. 27. 22:18
728x90

안녕하세요!

이번 글에서는 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

 

 

 

 

728x90