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

时间:2019-04-20 05:53:39

标签: ios objective-c uitableview

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


我发现了两种实现表视图重排的方法。

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

drag delegate documentation supporting drag and drop in tableview in iOS11

对于我来说,禁止在应用之间拖放是非常重要的。

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

// didLoad

[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];
}

第二种方式:表格视图编辑模式

[self.myTableView setEditing: YES];

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

2 个答案:

答案 0 :(得分:2)

使用拖放委托的第一个选项很好。确保实现UITableViewDragDelegate方法- (BOOL)tableView:(UITableView *)tableView dragSessionIsRestrictedToDraggingApplication:(id<UIDragSession>)session并返回YES。这样可以确保拖放操作必须在同一应用程序内进行。

答案 1 :(得分:0)

如果出于此目的使用了Florian Mielke的FMMoveTable,效果很好。但是他现在已经停止使用它,指出您应该改用IOS 11拖放功能。尽管我看不到如何将其限制为单个表。

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