我有一个TableViewController,其中包含可容纳任务的行。如果任务具有属性task.done = 1
,我想将其从表的底部移到该位置。
我无法提供任何代码,因为毫无疑问,我该怎么做。
我的想法是在tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
中使用以下代码:
let element = tasks.remove(at: indexPath.row)
tasks.insert(element, at: tasks.count)
问题是,这需要在表装入后完成,因为例如,如果第一行是done = 1
,它将移至底部并在末尾再次进行处理。 / p>
答案 0 :(得分:1)
您可以以编程方式从UITableView中删除行,并以编程方式插入行。在对UITableView进行操作之前,请确保将特定项删除/添加到数据源阵列。否则,它将崩溃。
如果只想移动行,则可以使用下面的代码。您需要在保存数据源的数组更新的地方进行操作。
tableView.moveRow(at: oldIndexPath, to: newIndexPath)
如果要删除并将新对象插入数组,可以尝试如下所示的方法。
let element = tasks.remove(at: indexPath.row)
tableView.deleteRows(at: indexPath, with: .automatic)
tasks.insert(element, at: tasks.count)
tableView.insertRows(at: [IndexPath(row: tasks.count, section: 0)], with: .automatic)
答案 1 :(得分:0)
将代码包装在beginUpdates-endUpdates块中。使用func moveRow(在indexPath:IndexPath,到newIndexPath:IndexPath)
例如:未测试
self.tableView.beginUpdates()
let element = tasks.remove(at: indexPath.row)
let movingRowIndex = indexPath.row
tasks.insert(element, at: tasks.count)
let indexPath = NSIndexPath(forRow: movingRowIndex, inSection: 0)
var lastIndexPath = NSIndexPath(forRow:tasks.count, inSection: 0)
self.tableView.moveRow(at indexPath: IndexPath, to newIndexPath: lastIndexPath)
self.tableView.endUpdates()