Как перезапустить UITableView canMoveRowAt - PullRequest
0 голосов
/ 15 февраля 2020

Я использую canMoveRowAt () и moveRowAt () для отображения маркеров перетаскивания в моих строках. В canMoveRowAt я тестирую условие на основе некоторых данных строки:

... get reference to row data ...

return rowData.myCondition()

Это прекрасно работает, когда таблица впервые переведена в режим редактирования. , Однако, находясь в режиме редактирования, данные в строке могут измениться (хотя это все еще та же строка). Я хотел бы повторно запустить canMoveRowAt, чтобы переоценить условие и, возможно, изменить, будет ли показан указатель перетаскивания для строки.

До сих пор мне удавалось сделать это только путем завершения и перезапуска режима редактирования. Когда я делаю это, он очищает выборки в таблице, поэтому я должен сохранить и повторно применить их. Это похоже на хак.

Есть ли более элегантный способ повторно вызвать canMoveRowAt, чтобы избежать этого?

1 Ответ

0 голосов
/ 16 февраля 2020

ОК, в конце концов я просто выбрал reloadRows (at :), сохранив и восстановив выборки вокруг этого:

let savedSelections = vList.indexPathsForSelectedRows ?? []
vList.reloadRows(at: [dragHandleRowIndexPath], with: .automatic)
for indexPath in savedSelections {
    vList.selectRow(at: indexPath, animated: false, scrollPosition: .none)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...