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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过拖动委托向上或向下拖动一行来重新排列表格中的部分(iOS 11)相关的知识,希望对你有一定的参考价值。

我想在tableview中启用拖放功能。我只想在应用程序中拖动项目,我不希望它被转移到其他应用程序。

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

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

drag delegate documentation supporting drag and drop in tableview in iOS11

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

在这种情况下使用拖动委托确定吗?或者我应该使用其他解决方案?

// didLoad

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

// itemsForRegisterDragSession

(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];

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

答案

您使用拖放代理的第一个选项很好。一定要实现UITableViewDragDelegate方法- (BOOL)tableView:(UITableView *)tableView dragSessionIsRestrictedToDraggingApplication:(id<UIDragSession>)session并返回YES。这将确保拖放必须在同一个应用程序中进行。

另一答案

如果弗洛里安·米尔克(Florian Mielke)为此目的使用过FMMoveTable,那么效果很好。但他现在已经停止使用它,说明你应该使用IOS 11拖放功能。虽然我看不出你如何将它限制在一个表中。

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

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

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

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

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

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

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

如何在jQuery中移动表格行?