Apr 13, 2021, TIL (Today I Learned) - TableViewController vs UIViewController.tableView()

Inwoo Hwang·2021년 8월 26일
0
post-thumbnail

학습내용


궁금증 1: UIViewController로 TableView를 구현하는 것과 UITableViewController를 사용하는 것의 차이점이 뭐지?

UITableView를 구현하는 방법으로는

  1. 우선 UIViewController를 생성한 뒤 UITableViewDelegate 프로토콜과 UITableViewDataSource프로토콜을 채택하는 방법
  2. 그리고 UIViewController를 상속받는 UITableViewController를 생성하는 방법

이렇게 총 두 가지가 있다.

이 두가지 방법의 차이점은 무엇일까 궁금하여 조금 찾아봤다.

open class UITableViewController : UIViewController, UITableViewDelegate, UITableViewDataSource {

}

위에 보이는 것 같이 UITableViewController는 UIViewController를 상속받으면서 UITableViewDelegate 그리고 UITableViewDataSource 프로토콜을 채택하고 있다.

테이블뷰 컨트롤러는 이미 UITableViewDelegate와 UITableViewDataSource를 채택하고 있기 때문에 테이블뷰 컨텐츠의 데이터관리와 유저 인터렉션에 대한 반응을 이미 지원한다고 합니다.

이 외에도 UITableViewController는 아래와 같은 추가 기능을 지원합니다.

  • 스토리보드 또는 nib file에 있는 테이블뷰를 자동으로 load해 주는 기능을 지원합니다. 테이블뷰는 tableview 프로퍼티를 통해 접근할 수 있다고 합니다.

    • UIViewController에서 테이블뷰를 구현하려면 기본적으로 스토리보드에서 테이블뷰를 생성한 뒤 따로 @IBOutlet weak var table: UITableView!으로 연결 해 주는 과정이 필요한데 UITableViewController를 사용하게 되면 이 과정이 필요 없게 됩니다. 왜냐하면 자동적으로 이 연결과정이 이뤄지고 테이블 뷰 프로퍼티가 load되기 때문이죠!
  • TableViewDataSource와 TableViewDelegate에게 자신을 위임합니다.

    • UItableView가 TableViewDataSource 그리고 TableViewDelegate 프로토콜에게 일을 시키려면 아래와 같이 위임하는 과정이 필요합니다.

      @IBOutlet weak var tableView: UITableView!
      
      override func viewDidLoad() {
              super.viewDidLoad()
              tableView.delegate = self
              tableView.dataSource = self
              }

      UIViewController를 사용할 경우 자신과 연결 되어 있는 tableView의 delegate 프로토콜과 dataSource 프로토콜에게 위임하는 작업이 필요한데 UITableViewController를 사용하게 되면 위와 같은 위임하는 코드를 작성하지 않아도 됩니다!

  • viewWillAppear(_:) 메서드를 실행하고 자동으로 테이블뷰에 필요한 데이터를 reload시켜줍니다. 전에 선택되었던 cell의 자국을 viewWillAppear메서드가 실행될 때 없애 주는 것이지요

  • viewDidAppear(_:) 메서드를 실행하고 자동으로 테이블뷰가 화면에 보이면 옆에 보이는 스크롤을 번쩍 하는 에니메이션을 준다네요(디테일이 살아있다 증말 🤩)

  • setEditing(_:animated:) 메서드를 시행하고 유저가 navigation bar의 edit 또는 Done버튼을 눌렀을 때 자동으로 edit mode를 토글 해 준다고 합니다.

  • 사용자 입력모드일 때 키보드가 화면에 나오게 되면 화면에 맞게 자동으로 테이블뷰의 사이즈를 조정해 준다고 합니다.

위와 같은 편의성을 제공하는걸 봐서는 미리알림 과 같이 사용자가 목록을 수정해야 하거나 데이터를 생성해야 할 때는 UIViewController보다는 UITableViewController를 쓰는 것이 훨씬 더 메리트가 많을 것 같다는 생각이 들었습니다!! 👏👏👏👏 🥕

궁금증 2: 뷰컨트롤러에서 이니셜라이저를 어떻게 만들어야 하지?

아직 완벽히 이해 못했습니다;

프로젝트 진행 중 벽 직면

아이템 갯수 A, B, C를 반환하는데 그 도중에 아이템의 갯수가 변화되는 경우 A, B 만 테이블에 도착할 수 있다. 이런 경우에는 어떻게 대응해야 하나요....

그러니까요...내일 더 공부 해 보겠습니다.

[출처]: UITableViewController | Apple Developer Documentation

profile
james, the enthusiastic developer

0개의 댓글