Как я могу использовать Drag and Drop, чтобы изменить порядок UITableView? - PullRequest
1 голос
/ 18 февраля 2020

Я знаю, что перетаскивание можно использовать для передачи данных между приложениями и между ними. Я не заинтересован в этом. Все, что я хочу, это использовать функцию перетаскивания, чтобы изменить порядок табличного представления без передачи данных. Как мне это сделать?

1 Ответ

2 голосов
/ 18 февраля 2020

Если вы выполняете перетаскивание одного элемента локально , вы можете использовать tableView(_:moveRowAt:to:). Для этого вам необходимо реализовать UITableViewDragDelegate .

Настройка

Начните с настройки ваших делегатов. Для iPhone требуется установка dragInteractionEnabled.

func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = self
    tableView.delegate = self
    tableView.dragDelegate = self
    tableView.dragInteractionEnabled = true
}

UITableViewDragDelegate

Обратите внимание, что массив возвращает один элемент. Если вы вернете более одного элемента, вместо tableView(_:moveRowAt:to:) будут использоваться методы UITableViewDropDelegate. Вы должны установить локальный объект.

func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {
    let dragItem = UIDragItem(itemProvider: NSItemProvider())
    dragItem.localObject = data[indexPath.row]
    return [ dragItem ]
}

Перемещение

Здесь происходит перемещение, которое фактически является частью UITableViewDelegate.

func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
    // Update the model
    let mover = data.remove(at: sourceIndexPath.row)
    data.insert(mover, at: destinationIndexPath.row)
}

Вы можете также используйте tableView(_:canMoveRow:at:) и tableView(_:targetIndexPathForMoveFromRowAt: toProposedIndexPath:), если необходимо.

Подробнее вы можете прочитать здесь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...