我创建了两个可扩展单元格,但是第二个单元格在我点击时不会扩展
我用很多方法搜索了该方法,但是这似乎是最短和最简单的方法。
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
答案 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]]
。