Swift: переупорядочить строки таблицы программно - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть 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, она будет перемещена вниз и снова обработана в конце.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Оберните ваш код в блок beginUpdates-endUpdates. Используйте функцию 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()
0 голосов
/ 26 сентября 2018

Вы можете программно удалить строку из 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...