Swift - Подвижные строки в tableView только внутри раздела, а не между - PullRequest
0 голосов
/ 09 сентября 2018

Есть ли способ предотвратить перемещение ячеек в табличном представлении в другой раздел?

В sections имеются данные для различных типов ячеек, поэтому приложение вылетает, когда пользователь пытается перетащить ячейку в другой раздел.

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

Соответствующий код ниже:

override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
    return true
}

override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
    let reorderedRow = self.sections[sourceIndexPath.section].rows.remove(at: sourceIndexPath.row)
    self.sections[destinationIndexPath.section].rows.insert(reorderedRow, at: destinationIndexPath.row)

    self.sortedSections.insert(sourceIndexPath.section)
    self.sortedSections.insert(destinationIndexPath.section)
}

Ответы [ 2 ]

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

Вам нужно будет реализовать метод UITableViewDelegate targetIndexPathForMoveFromRowAt.

Ваша стратегия будет состоять в том, чтобы разрешить перемещение, если источник и пункт назначения section совпадают. Если это не так, вы можете вернуть либо строку 0, если предложенный раздел назначения меньше, чем исходный раздел, либо последнюю строку раздела, если предлагаемый раздел назначения больше, чем исходный раздел.

Это ограничит перемещение в исходную секцию.

override func tableview(_ tableView: UITableView, targetIndexPathForMoveFromRowAt sourceIndexPath: IndexPath, toProposedIndexPath proposedDestinationIndexPath: IndexPath) -> IndexPath {

    let sourceSection = sourceIndexPath.section
    let destSection = proposedDestinationIndexPath.section

    if destSection < sourceSection {
        return IndexPath(row: 0, section: sourceSection)
    } else if destSection > sourceSection {
        return IndexPath(row: self.tableView(tableView, numberOfRowsInSection:sourceSection)-1, section: sourceSection)
    }

    return proposedDestinationIndexPath
}
0 голосов
/ 09 сентября 2018

Проверьте эту ссылку Apple Doc

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/tableview_iphone/ManageReorderRow/ManageReorderRow.html

вам нужно управлять условиями в

targetIndexPathForMoveFromRowAtIndexPath

canMoveRowAtIndexPath

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