可扩展单元不会扩展

时间:2019-05-13 15:18:57

标签: ios swift

我创建了两个可扩展单元格,但是第二个单元格在我点击时不会扩展

我用很多方法搜索了该方法,但是这似乎是最短和最简单的方法。

private var dateCellExpanded: Bool = false

    override func viewDidLoad() {
        super.viewDidLoad()
        // For removing the extra empty spaces of TableView below
        self.tableView!.tableFooterView = UIView()
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if indexPath.row == 0 {
            if dateCellExpanded {
                dateCellExpanded = false
            } else {
                dateCellExpanded = true
            }
            tableView.beginUpdates()
            tableView.endUpdates()
        }
    }

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if indexPath.row == 0 {
            if dateCellExpanded {
                return 250
            } else {
                return 40
            }
        }
        return 40
    }

我希望能够添加任意数量的单元格,并使它们在点击时扩展,但是只有第一个单元格可以。 Here's what happens

1 个答案:

答案 0 :(得分:1)

它仅适用于第一行,因为您使用if indexPath.row == 0将其限制为第一行。

您需要一个Bool数组,而不是一个Bool数组,因为您需要跟踪所有行的状态。

只需将您的行数初始化为false值的数组即可。在下面相应地设置NUMBER_OF_ROWS

然后,当选择一个单元格时,可以翻转(或toggle())该行的布尔值,并要求表进行更新。

private var isCellExpanded: [Bool] = Array(repeating: false, count: NUMBER_OF_ROWS)

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    isCellExpanded[indexPath.row].toggle()
    tableView.beginUpdates()
    tableView.endUpdates()
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if isCellExpanded[indexPath.row] {
        return 250
    } else {
        return 40
    }
}

请注意,这假设您仅使用了一个部分。否则,您必须将数据结构[Bool]调整为[[Bool]]