我有一个包含多行的可扩展表格视图单元格,我希望不可能同时打开多行。
这是我到目前为止的代码:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
dataSource[indexPath.row].isExpanded.toggle()
questionsTableView.reloadRows(at: [indexPath], with: .automatic)
}
我尝试了多种方法来实现这一目标,例如:
var selectedIndex = 0
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if dataSource[indexPath.row].isExpanded == false {
if indexPath.row == selectedIndex {
dataSource[indexPath.row].isExpanded.toggle()
} else {
dataSource[selectedIndex].isExpanded.toggle()
dataSource[indexPath.row].isExpanded.toggle()
}
} else {
dataSource[indexPath.row].isExpanded.toggle()
}
selectedIndex = indexPath.row
dataSource[indexPath.row].isExpanded.toggle()
questionsTableView.reloadRows(at: [indexPath], with: .automatic)
}
但这行不通。 我只需要一行代码,使所有行在新行打开之前关闭,或者一种方法来检查单击的新行是否是新行,在这种情况下,它将关闭之前打开的行。这就是我在这里尝试做的,但它不起作用。
我还是个初学者,所以如果你能给我一个详细的答案,那会对我有很大帮助。
有很多方法可以展开/折叠单元格,但是...
假设表格视图单元格中的
func set(...)
正确配置了单元格是否展开,这只是一种方法:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// toggle the isExpanded property of your data element
// for the just-selected row
dataSource[indexPath.row].isExpanded.toggle()
// loop through ALL elements of your data
for i in 0..<dataSource.count {
// if it is NOT the selected row
if i != indexPath.row {
// set isExpanded to false
// this will "close" any other row that is expanded
dataSource[i].isExpanded = false
}
}
// reload the talbe data
tableView.reloadData()
}