通过使用拖动委托向上或向下拖动一行来重新排列表格中的部分(iOS 11)

Posted

技术标签:

【中文标题】通过使用拖动委托向上或向下拖动一行来重新排列表格中的部分(iOS 11)【英文标题】:Rearranging sections in the table by dragging a row up or down with drag delegate (iOS 11) 【发布时间】:2019-04-20 05:53:39 【问题描述】:

我想在表格视图中启用拖放功能。我只想在应用中拖动项目,不希望将其转移到其他应用。

我找到了两种实现 tableview 重排的方法。

第一种方式:使用拖放委托

drag delegate documentation supporting drag and drop in tableview in ios11

不允许在应用程序之间拖放对我来说非常重要。

在这种情况下可以使用拖动代理吗? 还是我应该使用其他解决方案?

// 加载

[self.myTableView setDragDelegate: self];
[self.myTableView setDragInteractionEnabled: YES];

// itemsForBeginningDragSession

(NSArray<UIDragItem *> *)tableView:(UITableView *)tableView
                itemsForBeginningDragSession:(id<UIDragSession>)session
                                 atIndexPath:(NSIndexPath *)indexPath  API_AVAILABLE(ios(11.0)) 
Model *model = self.listOfX[indexPath.section];

NSItemProvider *itemProvider = [[NSItemProvider alloc] initWithObject: model];

UIDragItem *dragItem = [[UIDragItem alloc] initWithItemProvider: itemProvider];

return @[dragItem];

第二种方式:tableview编辑模式

[self.myTableView setEditing: YES];

我不想添加按钮并将表格视图状态更改为编辑模式。我想通过长按启用重新排列。

【问题讨论】:

Swift - Drag And Drop TableViewCell with Long Gesture Recognizer的可能重复 @fishinear 拖放委托是 iOS 11 中的新功能,我想找到最好的拖放方式。使用此新功能或使用以前的功能。 【参考方案1】:

您使用拖放委托的第一个选项很好。确保实现UITableViewDragDelegate 方法- (BOOL)tableView:(UITableView *)tableView dragSessionIsRestrictedToDraggingApplication:(id&lt;UIDragSession&gt;)session 并返回YES。这将确保拖放必须发生在同一个应用程序中。

【讨论】:

【参考方案2】:

如果为此目的一直使用 Florian Mielke 的 FMMoveTable,那效果很好。但他现在已停止使用它,表示您应该改用 IOS 11 拖放功能。虽然我看不出您如何将其限制为单个表。

另一种可能是使用this other *** answer中提到的教程。

【讨论】:

以上是关于通过使用拖动委托向上或向下拖动一行来重新排列表格中的部分(iOS 11)的主要内容,如果未能解决你的问题,请参考以下文章

如何通过拖动在SwiftUI ZStack中重新排列视图

向下拖动网页滚动条的时候,怎么老是自动向上滚动

DataGrid 用鼠标拖动改变列宽,怎么做

在运行时重新排列表格视图中的单元格

如何在jQuery中移动表格行?

Android:向上滚动时显示工具栏(向上拖动),向下滚动时隐藏(向下拖动)