我想在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];
}
[self.myTableView setEditing: YES];
我不想添加按钮并将表视图状态更改为编辑模式。我希望通过长按启用重新排列。
您使用拖放代理的第一个选项很好。一定要实现UITableViewDragDelegate
方法- (BOOL)tableView:(UITableView *)tableView dragSessionIsRestrictedToDraggingApplication:(id<UIDragSession>)session
并返回YES
。这将确保拖放必须在同一个应用程序中进行。
如果弗洛里安·米尔克(Florian Mielke)为此目的使用过FMMoveTable,那么效果很好。但他现在已经停止使用它,说明你应该使用IOS 11拖放功能。虽然我看不出你如何将它限制在一个表中。
另一种可能性是使用this other StackOverflow answer中提到的教程。