【发布时间】:2016-09-14 10:09:59
【问题描述】:
我只想非常优雅地在表格视图中添加和删除行。所以我问了这个question。但我不认为答案能回答我的问题。
然后我想我可以创建一个UITableViewCells 的数组并将其用作数据源!
所以我做了这样的事情:
class MyTableViewController: UITableViewController {
var cells = [[UITableViewCell]]()
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return cells.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cells[section].count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
return cells[indexPath.section][indexPath.row]
}
func addCellToSection(section: Int, cell: UITableViewCell) {
cells[section].append(cell)
tableView.reloadData()
}
func removeCellFromSection(section: Int, index: Int) {
cells[section].removeAtIndex(index)
tableView.reloadData()
}
}
现在我可以调用removeCellFromSection 和addCellToSection 来添加和删除单元格。多么优雅!
但是,我不确定是否一直拨打tableView.reloadData() 会降低应用程序的速度。每次我添加或删除一个单元格时,表格视图中的每个单元格都需要刷新。那会是很多工作,对吧?
所以一直调用tableView.reloadData() 会显着降低我的应用程序的速度吗?如果是,有什么可以替代的?如果没有,为什么不呢?
附加信息:
最初,表格视图包含 4 个单元格。用户可以通过按下按钮添加单元格和删除单元格。平均而言,用户将添加少于 50 个单元格。
【问题讨论】:
-
是的,会很慢。
-
当然,它会很慢,而且你不能指望平滑的tableview滚动,如果你多次重新加载数据。
-
@ShangariC 那么还有其他选择吗?
-
因此,如果您有类似的单元格,那么您执行错误,这就是为什么我们使用
reuseIdentifier来更新具有所需值的单元格,而不是创建或保留大量单元格...保持单元格在一个数组仍然将它们保存在内存中......而不是将所需的数据保存在一个数组中以区分单元格并在可以在cellForRowAtIndexPath中重用的单元格中更新它们 -
不要创建单元格数组。创建要在单元格中使用的数据数组并将其用作数据源。处理
cellForRowAtIndexPath中的单元格自定义,TableView 将负责显示、隐藏、滚动、刷新单元格。 TableView 重用单元格,因此您的内存使用将非常合理。你不必自己做。并且一定要查找关于 TableViews 的好教程。
标签: ios swift uitableview