如何在单击另一行时关闭可扩展表格视图行

问题描述 投票:0回答:1

我有一个包含多行的可扩展表格视图单元格,我希望不可能同时打开多行。

这是我到目前为止的代码:

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)
}

但这行不通。 我只需要一行代码,使所有行在新行打开之前关闭,或者一种方法来检查单击的新行是否是新行,在这种情况下,它将关闭之前打开的行。这就是我在这里尝试做的,但它不起作用。

我还是个初学者,所以如果你能给我一个详细的答案,那会对我有很大帮助。

ios swift uitableview
1个回答
0
投票

有很多方法可以展开/折叠单元格,但是...

假设表格视图单元格中的

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()
    
}
© www.soinside.com 2019 - 2024. All rights reserved.