Swift 3 - 可扩展的表格视图单元格,第一个单元格已扩展

2023-12-28

我正在使用 Swift 3。

我已按照本教程获取它,以便我可以点击表格视图单元格,该单元格将展开以显示更多信息。

我的问题是:如何做到这一点,以便在视图加载时第一个单元格展开(即用户不必单击即可看到该单元格展开),但所有其他行为保持不变(例如,如果再次单击它) ,它会解折叠)?

UITableViewCell:

import UIKit

class ResultsCell: UITableViewCell {

    @IBOutlet weak var introPara : UITextView!
    @IBOutlet weak var section_heading : UILabel!

    class var expandedHeight : CGFloat { get { return 200.0 } }
    class var defaultHeight : CGFloat { get { return 44.0 } }
    var frameAdded = false


    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        section_heading.translatesAutoresizingMaskIntoConstraints = false
    }

    func checkHeight() {
        introPara.isHidden = (frame.size.height < ResultsCell.expandedHeight)
    }

    func watchFrameChanges() {
        if(!frameAdded) {
            addObserver(self, forKeyPath: "frame", options: .new, context: nil)
            checkHeight()
        }
    }

    func ignoreFrameChanges() {
        if(frameAdded){
            removeObserver(self, forKeyPath: "frame")
        }
    }

    deinit {
        print("deinit called");
        ignoreFrameChanges()
    }

    // when our frame changes, check if the frame height is appropriate and make it smaller or bigger depending
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if keyPath == "frame" {
            checkHeight()
        }
    }

}

UITableViewController

// class declaration and other methods above here...

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

// number of rows in the table view
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return section_heading.count
}

// return the actual view for the cell
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let resultcell = tableView.dequeueReusableCell(withIdentifier: "resultCellTemplate", for: indexPath) as! ResultsCell
    resultcell.section_heading.text = section_heading[indexPath.row]
    resultcell.introPara.attributedText = contentParagraphs[indexPath.row]

    return resultcell
}

// when a cell is clicked
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let previousIndexPath = selectedIndexPath

    // the row is already selected, then we want to collapse the cell
    if indexPath == selectedIndexPath {
        selectedIndexPath = nil
    } else { // otherwise, we expand that cell
        selectedIndexPath = indexPath
    }

    var indexPaths : Array<IndexPath> = []

    // only add a previous one if it exists
    if let previous = previousIndexPath {
        indexPaths.append(previous)
    }
    if let current = selectedIndexPath {
        indexPaths.append(current)
    }

    // reload the specific rows
    if indexPaths.count > 0 {
        tableView.reloadRows(at: indexPaths, with: .automatic)
    }
}

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    (cell as! ResultsCell).watchFrameChanges()
}

override func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    (cell as! ResultsCell).ignoreFrameChanges()

}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath == selectedIndexPath {
        return ResultsCell.expandedHeight
    } else {
        return ResultsCell.defaultHeight
    }
}

所以这按预期工作。

但如何才能使第一个单元格已经展开呢?

感谢您的帮助。


我觉得你没有完全理解你自己的代码,但既然你确实为你的问题付出了很多努力,我会给你一个提示。

在 UITableViewController 顶部的某个位置,您初始化选定的 IndexPath,它应该类似于

var selectedIndexPath: IndexPath?

您可以将其设置为默认值,如下所示

var selectedIndexPath: IndexPath? = IndexPath(row: 0, section: 0)

因此(行:0,节:0)处的单元格将默认展开。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 3 - 可扩展的表格视图单元格,第一个单元格已扩展 的相关文章

随机推荐