본문 바로가기
카테고리 없음

[iOS] 컬렉션뷰와 테이블뷰의 수동 클릭 설정 방법 및 주의사항

by 정석 지향 2023. 4. 14.
반응형

테이블뷰나 컬렉션뷰에서 사용자의 터치 이벤트로 셀이 클릭이 되면 델리게이트 함수인 didSelectRowAt 실행됩니다.

또한, 셀 내부의 override 변수인 isSelected 값을 변경됩니다.

 

isSelected에 didSet을 설정하거나 didSelectRowAt 함수 내부에서 셀이 클릭되었을 때의 로직을 실행할 수 있는데요, 예를 들어, 클릭된 셀은 배경색을 바꿔준다 한다거나 등의 행동을 취할 수 있습니다.

 

하지만 사용자의 터치 이벤트가 없더라도 셀이 클릭된 상태로 표현해야 할 상황이 있습니다. 이때, 프로그래밍으로 처리할 수 있는데요,

selectItem이라는 함수를 이용하며 됩니다.

 

주의할점으로는 selectItem을 실행하면 셀 클래스의 override 변수인 isSelected의 상태는 변하지만 사용자가 터치했을 때와는 달리 델리게이트 함수인 didSelectRowAt은 실행되지 않습니다.

 

반대로 셀이 클릭 해제된 상태를 표현하고 싶다면 deselectItem를 이용하면 됩니다. 마찬가지로 셀 클래스의 override 변수인 isSelected의 상태는 변하지만 사용자가 터치했을 때와는 달리 델리게이트 함수인 didSelectItemAt은 실행되지 않습니다.

 

따라서 사용자 터치로 인한 셀 클릭과 프로그래밍적인 셀 클릭에서의 동일한 로직을 실행시키고 싶다면 셀의 isSelected의 변수의 didSet부분에 코드를 작성하는 것을 추천드립니다.

 

isSelected의 didSet부분에 셀 클릭/해제 시 변화 표현

 


 

selectItem나 deselectItem를 사용하지 않고 외부에서 'cell.isSelected = true와 같이' 직접 접근하여 값 변경 시 실제로 셀의 isSelected 값은 변경되지 않는데요, 이러한 방식은 애플에서 권장하지 않는 방식이기 때문입니다.

아래 링크에서 애플의 권장사항을 확인하실 수 있습니다.

https://developer.apple.com/documentation/uikit/uicollectionviewcell/1620130-isselected

반응형