[iOS] TableView (3) TableView 구현 - UITableViewDelegate, UITableViewDataSource

hello_hidi·2022년 12월 22일
0

아요정리방

목록 보기
3/5
post-thumbnail

3. UITableViewDelegate

테이블 뷰에서 section의 header, footer를 관리하고 셀을 삭제하거나 위치를 바꾸고 그 외의 다른 작업을 수행하기 위한 메서드를 제공한다.

이 프로젝트에서는 많은 Delegate 메소드 중에서 3가지를 써볼 것이다. (2개는 헤더뷰 관련)

3-1. delegate 선언하기

UITableViewDelegate는 프로토콜이다!!
테이블뷰가 해야하는 일을 UITableViewDelegate에게 위임해서 위에 정의한 기능들을 수행하는 것이다!

public lazy var friendTableView = UITableView(frame: .zero, style: .grouped).then {
        $0.backgroundColor = .clear
        $0.translatesAutoresizingMaskIntoConstraints = false
        $0.separatorStyle = .none
        $0.delegate = self //-> 바로 이 코드로 위임을 하는거겠죠???
        $0.dataSource = self //-> 이것도 똑같이 위임 (여기서 코드 보시고 아래서 설명할게용!)
    }

3-2. heightForRowAt

UITableDelegate는 의무적으로 선언해야 되는 메소드가 없습니다. (DataSource는 아님)
많은 메소드가 있는데 그 중 한가지를 사용해 볼 생각입니다!

heightForRowAt : 셀 하나의 높이를 지정해주는 함수
아래 코드를 통해서 한 셀의 높이가 50이라는 것을 지정해줄 수 있겠죠?

//MARK: - UITablViewDelegate

extension FriendView: UITableViewDelegate {
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 50
    }

4. UITableViewDataSource

테이블 뷰는 데이터를 보여주기만 하는 것이지 자체적으로 데이터를 관리할 수 없기 때문에
UITableViewDataSource 프로토콜을 사용해야 한다.

테이블에서 데이터와 관련된 요청이 오면 응답하며 테이블의 데이터를 직접 관리하거나 앱의 다른 부분과 조정하여 해당 데이터를 관리한다.

4-1. dataSourece 선언하기

UITableViewDataSourece도 프로토콜이다!
즉 delegate처럼 선언해주면 된다.

4-2. dataSource Method

UITableViewDataSource에서는 의무적으로 선언해줘야 되는 메소드 2개가 있는데 바로

  • 몇 개의 셀인지? => numberOfRowsInSection
  • 셀이 어떻게 생겼지? -> cellForRowAt
    이렇게 2가지이다! 여기서도 이 두가지를 구현해보겠다!

numberForeRowsInSection

몇개의 셀인지 지정해주는 함수
우리는 더미데이터에 쌓여있는 사용자의 개수만큼을 사용할 예정이기 때문에 더미데이터의 개수를 리턴한다!

extension FriendView: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return friendDummyModel.count
    }

4-3. cellForRowAt

어떤 데이터를 보여주는 셀인지 지정하는 함수! 중요하기 때문에 하나씩 뜯어보겠습니다.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let friendCell = tableView.dequeueReusableCell(
            withIdentifier: FriendTableViewCell.identifier,
            for: indexPath)
                as? FriendTableViewCell else { return UITableViewCell() }
        
        friendCell.dataBind(model: friendDummyModel[indexPath.row])
        return friendCell
    }

1. dequeueReusableCell

재사용 큐에서 필요한 cell을 dequeue 하기 위한 함수

  • widthIdentifier: 식별자로 재사용 큐 안의 셀들을 구분하기 때문에 식별자가 들어감!
  • for: indexPath: tableView의 행을 식별하기 위해 사용한다!
    indexPath.row(행) 과 indexPath.section(섹션)으로 구분된다!!!

2. dataBind()

dataBind를 통해서 각 셀별로(indexPath.row) 순서에 맞는 값을 넣어준다.

profile
안뇽희디

0개의 댓글