我正在努力扩展和折叠表格视图单元格。当前情况很好,假设Row-0被点击,在index-1处添加了一个新行并显示为展开,当再次使用Row-0时,展开的index-1被折叠。如果Row-0处于展开状态,即使我点击另一行,该行也会扩展,同时保持两个打开状态。 这是我想要更改的内容,我希望在点击另一行时收缩任何其他行。即一次应打开一行。请参阅下面的ref代码,我尝试使用数组来检测当前扩展的行,只有当我们顺序执行时才会起作用,否则它会开始删除已签约的行。任何帮助将受到高度赞赏。
谢谢!
require 'binding_of_caller'
module RaiseWithObject
attr_accessor :exc_obj
def raise *args
args.first.exc_obj = self if args.first
super
end
end
class Object
include RaiseWithObject
end
扩展行的功能
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
if expandCellArray.object(at: indexPath.row) as! String == "contract"
{
for i in 0 ..< self.expandCellArray.count
{
if expandCellArray.object(at: i) as! String == "expanded"
{
self.contractCell(tableView: tableView, index: i)
self.expandCellArray.replaceObject(at: i, with: "contract")
print("Updated Expand Cell array",expandCellArray)
}
}
self.expandCell(tableView: tableView, index: indexPath.row)
self.expandCellArray.replaceObject(at: indexPath.row, with: "expanded")
print("Updated Expand Cell array",expandCellArray)
}
else
{
self.contractCell(tableView: tableView, index: self.selectedIndexPath.row)
}
}
合同行的功能
private func expandCell(tableView: UITableView, index: Int)
{
if (dataArray[index]?.title) != nil {
dataArray.insert(nil, at: index + 1)
myTableView.insertRows(at: [IndexPath(row: index + 1, section: 0)], with: .none)
}
}
答案 0 :(得分:0)
添加或删除单元格很棘手,因为您必须处理索引。或者,更简单的实现是使用expandable sections。
您只需使用动画显示和隐藏它们,而不是添加和删除。如果你只想打开一个部分,当用户点击另一个部分时,只需折叠打开的部分并在两个部分上重新加载部分(用户点击的部分和当前打开的部分)