我正在使用Swift 3。
我一直在关注本教程:https://www.youtube.com/watch?v=VWgr_wNtGPM,在StackOverflow上由this answer补充。
然而,这种方法的工作方式是,如果我单击一个单元格,它会在隐藏其他单元格时展开。我如何做到这一点,当我扩展它,其他已经扩展的单元格保持扩展?
答案 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并查看更详细的示例。