UITableView with XIB Practice

Panther·2021년 4월 6일
0

UITableView를 코드로 작성하는 방법에 대한 간단한 설명은 아래 링크를 참고하실 수 있습니다.
https://velog.io/@panther222128/UITableView-Programmatically-Practice

스토리보드만을 활용한 TableView 구현은 아래 링크에서 내용을 확인하실 수 있습니다.
https://velog.io/@panther222128/UITableView

먼저 스토리보드 View Controller에 TableView를 추가했습니다. Auto Layout 역시 설정해줬습니다.

TableView에 들어갈 Cell을 만들기 위해 파일을 추가합니다. XIB 연습이므로 Subclass of: UITableViewCell 밑에 Also create XIB file을 체크합니다.

파일 생성 시 아래처럼 xib 확장자 파일이 생성되고 오른쪽 화면에 Cell만 존재합니다.

Cell의 사이즈를 바꿉니다.

스토리보드 활용 시 Cell의 Class를 직접 지정해줘야 하는데, XIB는 아래처럼 자동으로 지정되어 있습니다.

Cell에서 필요한 View를 추가합니다.

View의 사이즈 조절과 Layout Constraint를 설정하지 않으면, Cell은 View를 보여줄 때 크기를 신경쓰지 않기 때문에 View의 사이즈, Layout Constraint를 설정해줘야 합니다.

XIB 파일 생성 시 CustomTableViewCell 이름으로 생성했습니다. 그리고 아래처럼 View 요소를 연결합니다.

class CustomTableViewCell: UITableViewCell {
    
    @IBOutlet weak var someImageView: UIImageView!
    @IBOutlet weak var someLabel: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }
    
}

보여줄 데이터를 만들었습니다.

struct Data {
    
    let ohMyGirlImage = [UIImage(named: "효정.jpg"), UIImage(named: "미미.jpg"), UIImage(named: "유아.jpg"), UIImage(named: "승희.jpg"), UIImage(named: "지호.jpg"), UIImage(named: "비니.jpg"), UIImage(named: "아린.jpg")]
    let ohMyGirlMember = ["효정", "미미", "유아", "승희", "지호", "비니", "아린"]
    
}

다음은 ViewController의 모습입니다. UITableViewDelegate, UITableViewDataSource 프로토콜을 채택 후 필요한 내용을 작성합니다. registerNib()에 보이는 것처럼 nib 등록을 잊지 않아야 합니다.

class ViewController: UIViewController {
    
    @IBOutlet weak var someTableView: UITableView!
    
    private let data = Data()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableViewDelegate()
        registerNib()
    }
    
    private func tableViewDelegate() {
        someTableView.delegate = self
        someTableView.dataSource = self
    }
    
    private func registerNib() {
        let nibName = UINib(nibName: "CustomTableViewCell", bundle: nil)
        someTableView.register(nibName, forCellReuseIdentifier: "CustomCell")
    }

}

extension ViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.ohMyGirlImage.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomTableViewCell
        cell.someLabel.text = data.ohMyGirlMember[indexPath.row]
        cell.someImageView.image = data.ohMyGirlImage[indexPath.row]
        return cell
    }
}

결과는 아래와 같습니다.

0개의 댓글