본문 바로가기

iOS (스파르타)

UITableView (UICollectionView 와의 차이점)

일단 전에 포스팅에서 UICollectionView에 관해서 했는데

UITableView와 비슷하면서 더 포괄적인? 부분이라생각하고

컬렉션뷰 공부한다고하니 튜터님이 테이블뷰랑의 차이점 먼저 알고 가는건 어떤지 하셔서 맞네,, 싶어서 정리하려고요

것도있다

지금 팀프로젝트에서 비슷하게 생긴 화면을 만드는데

다른분은 컬렉션뷰로 하기로했고, 나는 테이블뷰로 만들기로 했기때무네~

차이점도 같이 알아보장~

 

일단 UITableView에 대해서 공식문서를 보면

단일 열에 행을 사용하여 데이터를 표시하는 뷰 라고 설명이 되어있다.

@MainActor
class UITableView : UIScrollView

UICollectionView와 같이 UIScrollView를 상속받는다.

 

테이블 뷰는 수직 스크롤 콘텐츠 행을 단일 열에 표시한다. 테이블의 각 행에는 앱 콘텐츠가 하나씩 들어있다. 예를들어, 연락처 앱은 각 연락처의 이름을 별도의 행에 표시하고 설정 앱의 메인페이지는 사용 가능한 설정 그룹을 표시한다. 테이블을 구성하여 단일 긴 행 목록을 표시하거나 관련 행을 섹션으로 그룹화하여 콘텐츠를 더 쉽게 탐색할 수 있다.

 

테이블 뷰는 동적 프로토타입(Dynamic Prototypes), 정적 셀(Static Cells)?!

 

import UIKit

class ViewController: UIViewController {
    
    // 1. 테이블 뷰 생성
    var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 2. 테이블 뷰 초기화
        tableView = UITableView(frame: self.view.bounds, style: .plain)
        tableView.backgroundColor = .white // 테이블 뷰 배경색 설정
        
        // 3. 데이터 소스 및 델리게이트 설정
        tableView.dataSource = self
        tableView.delegate = self
        
        // 4. 테이블 뷰 셀 등록
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        
        // 5. 테이블 뷰를 뷰에 추가
        self.view.addSubview(tableView)
    }
}

extension ViewController: UITableViewDataSource, UITableViewDelegate {
    
    // 섹션당 행의 수 설정
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 20
    }
    
    // 각 행에 대한 셀 구성
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = "Row \(indexPath.row)"
        cell.backgroundColor = .lightGray
        return cell
    }
    
    // 행 선택 시 호출되는 메서드
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("Selected row at \(indexPath.row)")
    }
}

컬렉션 뷰와 같이 DataSource와 Delegate를 class와 묶어줄 수 있고 extension으로 빼줄수도있다.

 

초기화 관련해서 그냥 항상 해주니까 했는데 궁금해서 찾아봤는데

 

테이블 뷰의 초기화는 반드시 필요한 단계이고 테이블 뷰를 코드로 생성하는 경우에 UITableView인스턴스를 직접 초기화하고 설정해야 화면에 테이블 뷰가 나타난다. 그러나 초기화의 방식이나 시점은 상황에 따라 달라질 수 있다.

초기화하지 않으면 테이블 뷰 객체가 생성되지 않기 때문에, 화면에 테이블 뷰가 나타나지 않으며 데이터 소스와 델리게이트를 설정할 수 없다. (스토리보드에서 테이블 뷰를 추가하면 테이블 뷰의 인스턴스가 자동으로 초기화되고, 관련된 설정도 자동으로 적용되기 때문에 다시 초기화 할 필요는 없다고한다!)

 

초기화를 하지 않으면 뷰 컨트롤러가 테이블 뷰를 참조할 수 없어 화면에 테이블 뷰가 표시되지 않으며, 데이터 소스와 델리게이트 설정할수 없고 이로인해 앱이 제대로 동작하지 않거나 크래시가 발생할 수 있다.

 

 

테이블 뷰와 컬렉션 뷰의 차이점은 무엇이냐!

일단 컬렉션 뷰는 테이블 뷰를 품고?있다고? 그런 느낌이라 대부분의 테이블뷰로하는 작업은 컬렉션뷰로 다 할수있지만

컬렉션뷰의 작업들은 테이블 뷰로 못하는 경우가 많다 당연한말,,

테이블뷰도 섹션을 기준으로 그룹화 할 수 있고, 헤더 푸터를 옵션으로 지닐 수 있지만~

한개의 열에 여러행을 가지고있어 수평으로 스크롤은 안된다! 

테이블 뷰 자체가 수직으로 스크롤만 가능하고 수평으로 스크롤을 하고 싶다면 컬렉션 뷰를 사용하던지

아니면 테이블 뷰 셀 안에 컬렉션 뷰를 넣는 방법이있는데 굳이? 싶다,,

이렇게 보면 컬렉션 뷰 사용이 무난하지 않나? 싶지만

간단한 수직 스크롤뷰에는 테이블 뷰를 사용하는게 나는 그게 더,ㅡ,, 편한거 같다 ㅎ