셀을 삭제, 모달 뷰 띄우기 후 dismiss 등 인터렉션 시
테이블 뷰가 삭제, 호출 전 상태를 그대로 띄우고 있는 경우가 있습니다.
스와이프된 상태로 유지 되어있다던지.. (아래 gif이미지 참고)
이럴 때 두가지 방법이 있습니다.
첫번째, tableView 데이터 전체를 리로드 tableView.reloadData()
두번째, 사용자가 인터렉션한 Cell만 리로드 하는 것
어느정도 차이가 있을지 모르지만 데이터 양에 따라서
UX나, 자원관리 측면으로는 사용자가 인터렉션한 셀만 리로드하는 것이 좋을 것입니다.
특히, 서버에서 데이터를 가져온다면 request 수를 줄여 자원을 효율적으로 관리할 수 있는 이점이 있습니다.
예시와 같이 tableView delegate 메소드인 commit editingStyle 메소드에 구현하였습니다.
(실제로는 오픈소스인 SwipeCellKit을 사용하긴 했지만 방법은 동일합니다)
tableView.reloadRows(at: [indexPath], with: .none)
위 메소드의 with 파라미터를 통해 Cell을 업데이트할 때 애니메이션을 선택할 수도 있습니다.
저는 .none로 애니메이션을 따로 지정하지 않았습니다.
// TableViewController.swift
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
// 이 부분을 추가해줍니다.
self.tableView.reloadRows(at: [indexPath], with: .none)
// 아래는 삭제 눌렀을 시와 기타 동작
switch editingStyle {
case .delete :
print("삭제동작")
default :
print("기본동작")
}
}
자 확인해보면 사용자가 인터렉션한 셀이 사용자 인터렉션 후 바로 리로드 되는 것을 확인 할 수 있습니다.
반응형
'개발 > Swift' 카테고리의 다른 글
WebSocket에 대한 간단한 개요 (0) | 2023.04.27 |
---|---|
[Swift] TextField 다른 곳 터치시 키보드 내리기 (0) | 2022.08.16 |
[Swift / 디버깅] 어떤 레이아웃의 오류인지 확인하기. UILabel:0x132f261c0.firstBaseline == UILayoutGuide:0x60000357f2c0'TitleView(0x132f12de0)'.top + 28 (0) | 2022.08.15 |
[Swift] CoreData 특정 ID의 데이터만 가져오기 (전달하기) (0) | 2022.08.08 |
[Swift] CoreData 정렬 기능 추가하기 (0) | 2022.08.08 |