Swift 3 - 可扩展的表格视图单元格而不关闭其他单元格

时间:2017-03-07 15:50:54

标签: ios swift swift3

我正在使用Swift 3。

我一直在关注本教程:https://www.youtube.com/watch?v=VWgr_wNtGPM,在StackOverflow上由this answer补充。

然而,这种方法的工作方式是,如果我单击一个单元格,它会在隐藏其他单元格时展开。我如何做到这一点,当我扩展它,其他已经扩展的单元格保持扩展?

3 个答案:

答案 0 :(得分:2)

我建议您以优雅的方式实现这一目标的最佳方法是通过UIStackView元素实现它。

看一下这篇文章http://www.atomicbird.com/blog/uistackview-table-cells

答案 1 :(得分:0)

如果您想自己这样做,可以尝试这种方式。

第一步是你应该创建一个模型列表,如:

ParseTreeWalker walker = new ParseTreeWalker();
MyTryDSLListener listener = new MyTryDSLListener();
walker.walk(listener, tree);

var cellsData: [CustomData] = []; 似乎是:

CustomData

然后您的自定义单元格应该是什么样的,但您必须在class CustomData { var isExpanded: Bool = false; // whatever other variables } 中执行某些操作:

tableView:didSelectItemAt

然后在" tableView:cellForRowAt"好像是:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
   let row = indexPath.row;
   self.cellsData[row].isExpanded = !self.cellsData[row].isExpanded;
   self.tableView.reloadRows(at: [indexPath], with: .none); // or the other animations
}

请记住,单元格是可重复使用的,意味着如果您多次使用该单元格,那么单元格将在上次使用时保持状态。

答案 2 :(得分:0)

您可以使用ExpyTableView,它会从您指定的标题单元格中生成可展开的部分。兼容iOS 8.0。

您所要做的就是import ExpyTableView然后:

class ViewController: ExpyTableViewDataSource, ExpyTableViewDelegate {

  @IBOutlet weak var expandableTableView: ExpyTableView!

  // First, set data source and delegate for your table view.
  override func viewDidLoad() {
    super.viewDidLoad() 
    expandableTableView.dataSource = self
    expandableTableView.delegate = self
  }

  // Then return your expandable cell instance from expandingCell data source method.
  func expandableCell(forSection section: Int, inTableView tableView: ExpyTableView) -> UITableViewCell {
    // this cell will be displayed at IndexPath with section: section and row 0
  }
} 

您可以看到以前的表格视图部分现在是一个可展开的表格视图部分。您也可以下载example project并查看更详细的示例。