UItableView 셀 헤더 크기 변경

알림 일람표처럼 제목을 클릭하고 칸을 열고 내용을 표시하거나 숨기는 표를 만듭니다


먼저 양식과 컨텐트를 준비합니다.


이렇게 임시로 표와 데이터를 준비합니다.
class ExpandingTableViewViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    var datasource = [ExpandingTableViewCellContent]()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        tableView.dataSource = self
        tableView.delegate = self
        tableView.tableFooterView = UIView()
        tableView.estimatedRowHeight = 40 // これはStoryBoardの設定で無視されるかも?
        tableView.rowHeight = UITableViewAutomaticDimension // ここが重要

        datasource = [ExpandingTableViewCellContent(title: "内閣支持率、10ポイント増の52% 不支持率と逆転 ",
                                                    subtitle: " 日本経済新聞社とテレビ東京による22~24日の世論調査で、安倍内閣の支持率は52%となり、前回の5月下旬の42%から10ポイント上昇した。不支持率は5月の53%から42%に下がった。支持率が不支持率を上回るのは2月以来、4カ月ぶり。"),
                      ExpandingTableViewCellContent(title: "「起業の都」再び 京都に集まる資金・人材 ",
                                                    subtitle: "京セラ、日本電産など個性的な企業を生み出した京都で、もう一つの顔・京都大学と企業の関係が変わってきた。従来は共同研究が中心だったが、小回りの利くスタートアップ企業を通じ「大学の知」をビジネスに生かす動きが本格化。多くのノーベル賞受賞者を輩出し、自然科学分野の基礎研究に定評がある京大を核として「起業の都」に新たな波が起きている。"),
                      ExpandingTableViewCellContent(title: "アマゾン、AIスピーカーの“スキル”1000種に ",
                                                    subtitle: "米アマゾン・ドット・コムが投入した人工知能(AI)スピーカーの日本国内で使える独自機能が増え、スマートフォン(スマホ)のアプリに該当する「スキル」と呼ばれる機能がこのほど1000種類を突破した。スキルの技術仕様を外部に公開していることが、付加価値の高いスキルの開発につながっているようだ。")]

    }
U I T a bleViewAutomaticDimension 잊지 마십시오.

이야기판의 칸에 라벨을 놓다



셀에 위치 관계식만 지정하기
높이를 지정하지 않음
라인을 0으로 설정하여 여러 줄을 표시할 수 있습니다.

셀 정의


아웃렛으로 스토리보드 설정의 탭을 연결하고subtitle 내용을 표시하거나 숨기는 데 사용할 로고를 준비합니다
// セルに表示するデータを格納するクラス
class ExpandingTableViewCellContent {
    var title: String?
    var subtitle: String?
    var expanded: Bool

    init(title: String, subtitle: String) {
        self.title = title
        self.subtitle = subtitle
        self.expanded = false
    }
}

class ExpandingTableViewCell: UITableViewCell {

    @IBOutlet var titleLabel: UILabel!
    @IBOutlet var subtitleLabel: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    func set(content: ExpandingTableViewCellContent) {
        self.titleLabel.text = content.title
        self.subtitleLabel.text = content.expanded ? content.subtitle : ""
    }
}
본문 표시 여부를 조정합니다

테이블 내부 프로세스 정의

extension ExpandingTableViewViewController : UITableViewDataSource, UITableViewDelegate {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return datasource.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView .dequeueReusableCell(withIdentifier: String(describing: ExpandingTableViewCell.self), for: indexPath) as! ExpandingTableViewCell
        cell.set(content: datasource[indexPath.row])
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let content = datasource[indexPath.row]
        content.expanded = !content.expanded
        tableView.reloadRows(at: [indexPath], with: .automatic)
    }
}
칸을 눌렀을 때expaned 값을 전환합니다.
그리고reloadRows 방법으로 그 칸을 다시 불러오고, 칸의 set 방법을 다시 실행합니다.

실행





견본

좋은 웹페이지 즐겨찾기