Swift

Swift - UITableView 기초(1)

iosos 2023. 6. 27. 20:15

테이블뷰에서 사용하는 TableView Controller와 TableView 중 이 게시물에서는 TableView를 사용함

 

일반적인 ViewController에서 TableViewDelegate, TableViewDataSource를 상속하는 방법에 대해 설명하겠음 

 

* UITableView

- 테이블 형식의 목록을 제공하며, 여러 행과 열로 구성됨 

- 각 행은 UITableViewCell로 표시되고 사용자는 특정 행을 선택하거나 편집할 수 있음 

 

 

 

사용 방법

 

 

1. 스토리보드에 TableView 추가 

 

 

 

2. TableView의 autoLayout 추가

- 테이블뷰의 Constraints를 상하좌우를 0으로 주어 테이블뷰가 화면에 꽉차게 채움 

 

 

 

3. TableView의 outlet 추가 

 

 

 

 

 

4. 부모가 UIViewController인 경우 TableView를 사용하려면 UITableViewDelegate, UITableViewDataSource 프로토콜을 체택해야 함

 

- UITableViewDelegate는 필수 메서드가 없음 (옵셔널 메서드 중 'didSelectRowAt' 은 많이 사용됨 )

- UITableViewDataSource는 'numberOfRowsInSection', 'cellForRowAt' 메서드를 필수 메서드로 가짐 

 

- UITableViewDelegate : UITableView의 동작 및 모양을 커스터마이즈하는 데 사용. 행 선택, 셀 높이, 섹션 헤더/푸터 설정 제어

- UITableViewDataSource : UITableView에 데이터를 제공하는 데 사용. 테이블 뷰의 섹션 수, 각 섹션의 행 수, 셀 내용 등을 정의

 

 

* numberOfRowsInSection 메서드 

- 특정 섹션에 표시될 행의 개수를 반환하는 역할

- 매개변수

     - 'tableView' : UITableView 인스턴스 

     - 'section' : 행 수를 반환할 섹션의 인덱스 

- 반환 값 : 해당 섹션에 표시될 행의 개수를 나타내는 정수 

 

 

* cellForRowAt 메서드

- 각 행에 대한 UITableViewCell을 반환하는 역할

- 매개변수

     - 'tableView' : UITableView 인스턴스 

     - 'indexPath' : IndexPath 객체로, 특정 섹션과 행의 인덱스를 나타냄

- 반환 값 : 해당 행에 표시될 UITableViewCell 인스턴스 

 

 

 

 

5. delegate, dataSource 설정 

- UITableView 객체를 사용하여 테이블 뷰를 구성할 때, Delegate와 DataSource를 설정해야 함 

- Delegate와 DataSource를 현재 객체로 설정함으로써 테이블 뷰의 동작과 데이터 표시를 제어

- 일반적으로 viewDidLoad() 메서드에 설정 

- 설정하지 않으면 테이블뷰가 출력되지 않음 

 

 

 

 

 

6. TableViewCell 추가 

- UITableViewCell은 테이블뷰의 각 행에 대한 콘텐츠를 표시하는 역할을 담당하는 클래스

- 재사용이 가능한 셀로 테이블 뷰에서 여러 행을 효율적으로 처리하기 위해 사용됨 

 

 

 

- 테이블 뷰의 셀을 구성하는 방법 (content)

* Dynamic Prototypes

- 테이블 뷰에서 동적으로 셀을 생성하는 방법

- 테이블 뷰에서 복제되어 테이블 뷰의 행으로 사용됨, 런타임에 동적으로 셀을 생성하여 행의 개수가 동적으로 변경되는 경우에 적합

 

* Static Celss

- 테이블 뷰에서 정적으로 셀을 구성하는 방법 

- 앱의 설정 화면, 폼 입력 등과 같은 테이블 뷰의 행 수와 콘텐츠가 고정된 경우에 적합 

 

 

 

7. cell의 identifier 추가 

 

 

 

 

8. Cell을 관리할 TableViewCell 추가

 

 

- Cell을 관리할 클래스(tableViewCell) 과 연결 

 

 

 

 

9. TableViewCell에 Label 추가 후 class 파일과 연결 

 

 

 

 

10. 메서드 구현

- 'cellForRowAt' 메서드를 이용해 각 행에 대한 TableViewCell을 구성하여 반환

* tableView(_:numberOfRowsInSection:)

- 섹션에 해당하는 행의 개수를 반환 

- return 값으로 5를 반환하여 모든 섹션에서 5개의 행을 가지게 됨

 

 

* tableView(_:cellForRowAt:) 

- 주어진 IndexPath에 대한 셀을 구성하고 반환

 

* dequeueReusableCell(withIdentifier:for:)

- 테이블뷰에서 재사용 가능한 셀을 가져오는 메서드

- 주어진 식별자에 해당하는 셀을 큐에서 찾거나 새로 생성하여 반환 

 - 'withIdentifier' : 재사용할 셀의 식별자, 위 7번에서 설정한 cell의 identifier 값과 같아야 함 

- 'for' : 셀을 구성하는 IndexPath, 특정 섹션과 행을 가리킴 

 

 

* as! TableViewCell

- 가져온 셀을 TableViewCell로 캐스팅하여 TableViewCell 클래스의 인스턴스로 사용 

- as? 나 as!로 다운 캐스팅 하지 않으면 TableViewCell의 인스턴스 "myLabel"에 접근할 수 없음 

 

* 다운 캐스팅하는 이유

- dequeueReusableCell 메서드는 UITableViewCell 타입으로 반환됨.

- 그러나 우리가 사용하는 셀은 TableViewCell이라는 UITableViewCell의 서브 클래스 

- 따라서 UITableViewCell을 TableViewCell로 다운캐스팅 하는 것

 

 

* numberOfSections()

- 테이블 뷰의 섹션 수를 반환하는 메서드로 2로 설정하여 2개의 섹션을 가지게 됨 

 

 

 

 

+) UITableViewCell의 style 종류 

 

 

 

 

참고 : https://www.youtube.com/watch?v=F5WhaFcK9sg