【发布时间】:2017-08-25 20:33:57
【问题描述】:
在表格视图中实现 iOS 11 拖放。如果我不想拖动第一行,我假设我从 tableView(:itemsForBeginning:) 返回一个空数组
func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {
if indexPath.row == 0 {
return []
}
let dragItems = self.dragItems(forRowAt: indexPath)
print("dragging row index \(String(describing: dragItems.first?.localObject as? Int))")
return dragItems
}
当你不允许用户拖动内容时返回一个空数组 从指定的索引路径。
但即使验证了 [ ] 已返回,拖动仍然会发生。这意味着要么我搞砸了,要么该功能没有按文档实现。我总是犹豫是否认为它是其他人,所以我的问题是 [ ] 的返回是否实际上应该防止 0 行的拖累?其他人对此进行验证或证明其工作正常吗?
谢谢
编辑:来自 WWDC 视频的示例代码包含以下代码块:
if tableView.isEditing {
// User wants to reorder a row, don't return any drag items. The table view will allow a drag to begin for reordering only.
return []
}
这是说如果你不返回任何拖动项,表格视图仍然允许拖动?!?!那么如何防止一行被拖动呢?
【问题讨论】:
-
当你只是做
return []时会发生同样的事情吗? -
是的,它适用于纯
return [] -
您是否允许编辑表格视图,即重新排序行的旧方法?
-
@Losiowaty,您找到了答案。如果你想发布它,我会让你接受它。如果没有,我会发布它。它与 canMoveRowAt 相关,我在 10.x 中就这样做了,但在 11.x 中存在一些变化。感谢您提出的问题!
-
@JKaz 继续发布它,我很乐意为它投票 :) 我所做的只是让你朝着正确的方向轻推。
标签: ios uitableview uidragitem