TIL(Today I Learned)

iOS개발 캠프를 진행하면서 실력자분들을 많이 알게 되었고 배울점을 많이 느끼던 때에 좋은 기회로 공부를 같이 하는 자리를 갖게 되었는데, 첫번째 학습 목표는 기본적인 UI 구성으로 정해졌습니다.
iOS 개발 경험이 전무하고 스토리보드가 익숙하지 않아서 아직은 걱정이 많이 되지만 밴드부(?)원 들이 주신 힌트로 TableView부터 찬찬히 공부해 보기로 마음 먹었습니다.

UITableView란?
  • 하나의 열에 세로로 스크롤되는 콘텐츠 행들을 표시
  • UIScrollView를 상속받기 때문에 기본적으로 스크롤이 가능
  • 하나의 긴 행을 표시하도록 구성하거나 관련 행을 섹션 형태로 그룹화 하여 탐색에 용이하게 구성 가능
  • 각 행의 콘텐츠를 표시하는 cell로 구성
  • header, footer를 생성하여 각 그룹에 대한 추가적인 정보 제공 가능
style
  1. plain: 가장 기본적인 스타일
  2. grouped: 각 섹션에 고유한 행들의 그룹이 있는 스타일
  3. insetGrouped: 각 섹션의 그룹이 둥근 모서리 형태로 처리된 스타일
UITavleViewCell / UITableViewDataSource
  • UITableViewCell - 테이블 행의 내용을 관리하도록 도와주는 특수한 유형의 View
  • UITableViewDataSource - Cell에 데이터를 적용하고 이를 TableView에 넣어주는 역할
    class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
    
  • UITableViewDataSource를 채택할때의 필수 구현 메소드
    1. func numberOfSections(in tableView: UITableView)
      • TableView의 각 섹션이 몇개의 row를 포함할 것인지를 지정
    2. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
      • cell을 본격적으로 생성
      • indexPath에 현재 생성하려는 cell이 몇번째 섹션의 몇번째 row인지에 대한 정보를 가지고 있음
section 구분 메소드
  1. func numberOfSections(in tableView: UITableView)
    • 현재 TableView에 적용해줄 섹션의 개수를 반환
  2. func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int)
    • 각 섹션의 header 이름을 정의
Cell Reuse?
  • UITableView와 UICollectionView에서는 메모리 효율을 위해 모든 Cell을 한번에 생성 x
  • dequeue의 형식으로 화면에 표시될 cell만을 메모리에 올리고 스크롤로 새로운 cell이 보여질때, 기존에 올라가있던 cell 중 안보이도록 변한 cell을 내리고 새롭게 보여져야하는 cell을 올리는 방식
    -> cell을 내리고 올리는 과정에서 발생하는 오버헤드의 부담 증가
    -> 현재 생성되어 있는 cell을 재사용할 수 있도록 결정
  • 필요한 메서드
    1. register - 재활용할 cell의 타입을 String 형태의 identifier를 기반으로 확인하겠다는 것을 tableView에 알려주는 메서드
    2. dequeueReusableCell - withIdentifier에 앞서 등록한 identifier를 입력해주는 것으로 적절한 타입의 재사용 Cell을 가져오는 것이 가능
UITableViewDelegate
  • Custom Header 및 Footer View를 만들고 관리
  • Row, Header 및 Footer에 대한 사용자 정의 높이를 지정
  • 더 나은 스크롤 지원을 위해 높이 추정치를 제공
  • Row에 indent를 부여
  • Row 선택에 응답
  • Swipe를 포함한 action에 응답
  • table의 내용을 편집하는데 도움을 줌

댓글남기기