행 선택에 대한 응답
행이 선택 되기전 선택 되고 난후, 선택이 취소 되기전 취소 되고 난후를 알려줍니다.
멀티 터치를 사용하여 여러 항목을 선택할 수 있는지?
여러 행을 선택하면 알려줍니다.
여러 행을 선택한 것을 중지하면 알려줍니다.
디테일, 악세사리 버튼을 눌렀음을 알립니다.
행 스와이프에 대한 응답
셀 내용 수정
행 구성
특정 셀을 그릴려고 할 때 알려줍니다.!! willDisplay
메뉴
하이라이트
셀의 이동
제거시
포커스 (아이패드 트랙패드 올리면 .. 위에올리면)
포커스 .. 연관?
UITableVIewDataSource
데이터를 받아서 뷰를 그려주는 역할
테이블의 섹션 및 행 수를 설정 가능
테이블의 각 행에 대한 셀을 제공
섹션 헤더 및 푸터의 제목을 제공
액션에 따른 반응.
UITableViewDelegate에서 액션을 설정하면 그 액션 메시지를 받아서 UITableDataSource가 처리함. EditingStyle은 .none, .delete, .insert가 있음.
특정 index의 행이 edit 액션이 안뜨게 할 수 있습니다. 메서드를 부르지 않은 경우엔 전부 edit 액션이 뜹니다.
이동 관련
특정 index의 행을 이동시키지 않게 설정할 수 있습니다. 메서드를 부르지 않은 경우엔 전부 move가능
cell을 특정 index로 이동 시킬 수 있습니다.
섹션 인덱스 타이틀
테이블 뷰 오른쪽에 1~10 으로 표시했는데 저 인덱스 타이틀을 누르면 테이블 뷰가 이동함.
타이틀 인덱스를 눌렀을 때 섹션 인덱스에 맞는 위치로 이동합니다. 이 메서드를 사용하지 않아도 섹션 순서에 default로 작동합니다.
Cell Static vs Dynamic
static
→ 스토리보드에서 UI를 다 그리는 경우
(아이폰 설정앱 같은경우 static)
일반적인 static Cell은 UIViewController에서는 사용 불가능하고 UITableViewController을 상속 받아야 사용이 가능함. UITableViewController에서 제공하는 함수들로만 static cell을 조정 가능하기 때문.
dynamic
→ DataSource를 통해 데이터를 받아서 cell을 그림
셀의 재사용
셀이 몇천 몇만개가 될경우 메모리가 부족하게 되는데 이를 방지하고자 씀.!
테이블 뷰에 cell이 10개보이면 그 10개의 cell을 가지고 계속 재활용해서 사용!
메모리 관리를 위해서 iOS에서는 Reuse Queue가 돌아가고 있음.
셀이 스크롤 화면 밖으로 나가면 Reuse Queue에 들어가게 되고 dequeueReusableCell()를 사용시 데이터를 받아옵니다. 이 때 Reuse Queue에 원하는 셀이 없으면 init으로 초기화 시킵니다. 원하는 셀이 있으면 prepareForReuse() 메서드를 실행시켜서 재사용을 준비합니다.
dequeueReusableCell(withidentifer:index:) ← UITableView에 있는 메서드
재사용시 주의사항
투명도, 컬러 등 설정들은 재사용시 그대로 유지하고 있기 때문에 cell을 만들 때 세부적으로 코드를 작성해야함.
section 0에만 파랑색으로 배경색을 설정.
스크롤 했을시 파랑색으로 설정한 값들이 재사용됨.
Batch Update
tableView.reloadData()는 테이블 뷰 전체를 처음부터 구성하기 때문에 비용이 큽니다. 그래서 테이블뷰의 일부분만 변경되었을 때 테이블 변화적용시킬 수 있는 방법들이 있습니다.
데이터에 변화를 주지 않고 View에서만 변화를 시켜주기 때문에 Data를 변경시키고 실행시켜주는 것이 좋습니다.
tableView에서 변경을 많이 했을 경우 delegate와 dataSource에 불필요한 쿼리가 많이 발생하게 됩니다. 이때
beginUpdates() - 여러 수정 메서드들 - endUpdates() 를 할 경우 한번만 쿼리가 가게 됩니다.