iOS) UITalbeView editing mode 에서 multiple selection 구현
UITalbeView editingStyle allowsMultipleSelectionDuringEditing
allowsMultipleSelectionDuringEditing
- editing mode 에서 체크마크 속서이 없어서 구현에 어려움을 느꼈다. 하지만 allowsMultipleSelectionDuringEditing 속성을 통해서 해결했다.
- 이렇게 선택된 row 들의 정보는 아래의 속성을 통해서 리턴 가능하다.
tableView.indexPathForSelectedRow
현재 선택되어있는 cell의 index를 return-
tableView.indexPathsForSelectedRows
tableView가 선택된 cell들의 index를 배열로 return합니다.(multiple selection이 가능할 때 사용)→ 출력해보면
[[0,0],[0,1]]
처럼 section 과 row 를 보여준다.
그래서 나는 cell 이 선택될 때 출력해보도록했다.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("didSelectRowAt")
print(tableView.indexPathsForSelectedRows!)
}
- 우선 테이블뷰에 설정을 해주어야합니다. 스토리보드로 진행해도 되고 코드로 작성해도 됩니다.
- storyboard 진행
- programmatically 진행
tableView.allowsMultipleSelectionDuringEditing = true
- cell 의 selectionStyle 을 설정
tableView(tableView:cellForRowAt indexPath:) 메서드를 통해서 selectionStyle 을 설정해주면 된다.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: ListCell.identifier) as? ListCell else {
return UITableViewCell()
}
//기본값이 .none 이 되어있기때문에 설정.
//옵션에 .blue .gray .default 가 있는데 다 같은 효과를 보여주고 있다.
cell.selectionStyle = .blue
return cell
}
- 위의 코드를 입력하지 않으면 이런식으로 눌러도 체크가 되지 않는다. 하지만,
tableView(tableView:didSelectRowAt:)
메서드로 로그를 찍어보니까 처음 선택했을 때 찍히고 두번째 선택하면 찍히지 않는다. 선택이 해제가 된다는 의미이다. - 즉, 선택은 되는데 보이지만 않는 것이다.
selectionStyle = .none
인 상태이다.