Я использую UITableView
, чтобы отобразить пару разделов, представляющих элемент списка дел, каждый из которых состоит из пары строк, представляющих меньший элемент списка дел:
- Finish thesis
-- Interview representatives
-- Rewrite chapter 8
-- Create cover sheet
- Clean the house
-- Do the dishes
-- Mop living room
-- Clean windows in bathroom
Iуспешно реализовали способ перестановки строк с помощью DragDelegate
и DropDelegate
из UITableView
.Я удостоверяюсь, что все подвижно (протокол canMoveRowAt
возвращает true).Чтобы дать вам представление о том, как я это делаю:
func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {
let toDoName = toDoList[indexPath.section].toDoItem[indexPath.row].toDoName
let itemProvider = NSItemProvider(object: toDoName as NSString)
let dragItem = UIDragItem(itemProvider: itemProvider)
dragItem.localObject = item
return [dragItem]
}
В MoveRowAt()
Я проверяю, что данные соответствующим образом изменены, удаляя данные из sourceIndexPath
и вставляя их в destinationIndexPath
.Это прекрасно работает.
Однако я хотел бы также сделать разделы перетаскиваемыми - сортировать список дел по приоритету.Например, если я добавляю новый элемент для выполнения, он автоматически добавляется в конец, но, возможно, это что-то важное, что нужно сделать в первую очередь, поэтому я хочу, чтобы это - как раздел со всеми строками - было перетаскиваться вверх.если нужно.
Могу ли я сделать это тем же методом?Я выяснил, что нет никаких протоколов для разделов, как есть для строк (moveRowAt
существует, но moveSectionAt нет, то же самое для canMoveSectionAt).
Я нашел функцию, tableView.moveSection(section, toSection: section)
, которую явероятно, нужно будет использовать.Но как я могу реализовать перетаскивание и прикрепить его к заголовку раздела?Нужно ли использовать пользовательский UILongPressGestureRecognizer
?Любые советы или доступные библиотеки о том, как этого добиться?