[iOS]CollectionView에서 두 번째 touch로 선택해제 하기

신용철·2020년 9월 17일
0

iOS_CollectionView

목록 보기
1/2

CollectionView에서 두 번째 touch로 선택해제 하기

collectionView(shouldSelectItemAt:)을 사용하여 collectionView의 cell touch시 어떻게 이벤트를 처리할 것인지 설정할 수 있습니다.

  • 호출 시점: collectionView(shouldSelectItemAt:) 은 사용자가 cell을 터치했을 때 collectionView(didSelectItemAt:)보다 먼저 호출됩니다.
  • 내용: 터치가 발생했을 때, 해당 cell을 선택된 상태로 만들 것인지 말 것인지 확인합니다. true를 return하면 선택을 허용하고 false를 return하면 선택을 허용하지 않습니다. 이는 시스템적으로 보았을 때 해당 cell을 isSeleted = true로 만들 것인지 아닌지를 결정하는 것입니다. 이 원리를 이용하여 두 번 째 터치시 cell 선택을 취소할 수 있습니다. 아래 예제를 통해 이해해보겠습니다.
   func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
       guard let cell = collectionView.cellForItem(at: indexPath) as? CustomCell else {
           return true
       }
       if cell.isSelected {
           collectionView.deselectItem(at: indexPath, animated: true)
           return false
       } else {
           return true
       }
   }
  • 위의 코드는 cell이 선택되었을 때, 만약 해당 index의 cell이 선택상태라면, 그 cell을 deselect시킨 후 false를 리턴하여 선택되는 것을 방지하고, 선택상태가 아니라면 그냥 selected를 허용하겠다는 의미입니다.

  • collectionView(didSelectItemAt:)와의 차이점은 호출 시점의 차이 입니다. 이 메서드는 마치 property observer의 didSet처럼 변화가 발생된 이후에 호출되는 메서드입니다.

profile
iOS developer

0개의 댓글