一次展开并收缩UITableView第一行

时间:2017-06-18 00:40:00

标签: ios swift uitableview

我正在努力扩展和折叠表格视图单元格。当前情况很好,假设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)
    }

 }

1 个答案:

答案 0 :(得分:0)

添加或删除单元格很棘手,因为您必须处理索引。或者,更简单的实现是使用expandable sections

您只需使用动画显示和隐藏它们,而不是添加和删除。如果你只想打开一个部分,当用户点击另一个部分时,只需折叠打开的部分并在两个部分上重新加载部分(用户点击的部分和当前打开的部分)