拖放整个节,而不是拖放UITableView中的单行

时间:2018-11-26 16:07:31

标签: ios swift uitableview drag-and-drop sections

我正在使用UITableView显示代表待办事项的几个部分,每个部分都有几行,代表较小的待办事项:

- Finish thesis
-- Interview representatives
-- Rewrite chapter 8
-- Create cover sheet

- Clean the house
-- Do the dishes
-- Mop living room
-- Clean windows in bathroom

我已经成功实现了一种使用DragDelegate中的DropDelegateUITableView重新排列行的方法。我确保一切都是可移动的(协议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吗?有关如何完成此操作的任何提示或可用的库?

1 个答案:

答案 0 :(得分:0)

我不知道是否可以拖放整个部分,但现在可能不行,API可以同意拖放行。您可以做的一件事是创建一个在每个Item中都带有tableView的CollectionView,以便您可以拖放包含tableView的Item