하나의 UITableView 내에서 요소가별로 변하지 않는 2개 이상의 셀을 구분

3582 단어 XcodeiOSSwiftmemo
iOS의 메세지 앱의 풍선과 같은 셀과 같이, 상대와 스스로 다른 UITableViewCell 를 사용하고 싶지만, 내용의 구성은 그다지 변하지 않는 경우의 이야기를 상정.

우선 부모 UITableViewCell 를 하나 만든다



xib 파일 없이 하나 UITableViewCell 를 만들고 모든 셀에 공통 컴포넌트를 속성으로 가져간다.

CommonTableViewCell.swift
import UIKit

class CommonTableViewCell: UITableViewCell {
    @IBOutlet weak var label: UILabel!
}

상위 UITableViewCell을 상속받고 자식 UITableViewCell을 필요한 유형만 준비합니다.



여기에서는 ATableViewCellBTableViewCell 를 만든다.ATableViewCell 에는 UILabelUIButton 를 둔다.

UILabel 쪽은 부모이다 CommonTableViewCelllabel로 묶는다.

UIButton 의 분은 ATableViewCell 의 프로퍼티로서 가지고 둔다.

BTableViewCell 에는 UILabel 만 설치하고 CommonTableViewCelllabel 와 묶는다.


현시점에서 CommonTableViewCelllabel 에는 ATableViewCellBTableViewCell 안에 UILabel 가 붙어 있다.

사용법



우선은 nib 파일을 등록.
override func viewDidLoad() {
        super.viewDidLoad()

        var nib = UINib(nibName: "ATableViewCell", bundle: nil)
        tableView.registerNib(nib, forCellReuseIdentifier: "ATableViewCell")
        nib = UINib(nibName: "BTableViewCell", bundle: nil)
        tableView.registerNib(nib, forCellReuseIdentifier: "BTableViewCell")

        tableView.delegate = self
        tableView.dataSource = self
    }
tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) 내에서
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let row = indexPath.row
        var cell:CommonTableViewCell!
        // 乱数の3の剰余が0ならATableViewCellを使う
        if (rand() % 3 == 0){
            var aCell = tableView.dequeueReusableCellWithIdentifier("ATableViewCell") as ATableViewCell
            aCell.button.setTitle("Hoge", forState: UIControlState.Normal)
            cell = aCell
        } else {
            cell = tableView.dequeueReusableCellWithIdentifier("BTableViewCell") as BTableViewCell
        }
        cell.label.text = "\(row)"

        return cell
    }

등과 같이 상속의 이점을 살려 각 값을 설정할 수 있다.

좋은 웹페이지 즐겨찾기