gpt4 book ai didi

ios - 为什么空的 UIDragItem 数组仍然允许拖动行?

转载 作者:行者123 更新时间:2023-12-01 19:51:06 24 4
gpt4 key购买 nike

在表格 View 中实现 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
}

Return an empty array when you do not allow the user to drag content from the specified index path.



但即使验证了 [ ] 已返回,拖动仍然会发生。这意味着要么我搞砸了,要么该功能没有按文档实现。我总是犹豫是否认为它是其他人,所以我的问题是 [ ] 的返回是否实际上应该防止 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 []
}

这是说如果你不返回任何拖动项,表格 View 仍然允许拖动?!?!那么如何防止一行被拖动呢?

最佳答案

感谢@Losiowy 指出有用的方向。

我知道在 tableView 中,drop 委托(delegate)会查看 tableView(:moveRowAt:)如果只有一个 UIDragItem .我没有看到任何地方记录的是它还检查了 tableView(:canMoveRowAt:) ,尽管现在回想起来似乎很明显。

我的 canMoveRowAt看起来像这样:

// Override to support conditional rearranging of the table view.
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the item to be re-orderable. If coded that the first row is non-editable, that row is by definition also non-re-orderable
return true
}

注意方法内的注释。我不知道是我写了评论还是从某个地方复制了它。我阻止了第 0 行可编辑(在编辑模式下可删除和重新排序)并让它覆盖 canMoveRowAt ,但这显然被 iOS 11 拖放忽略了。所以解决方案是明确的,如:
// Override to support conditional rearranging of the table view.
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the item to be re-orderable.
if indexPath.row == 0 {return false}
return true
}

诊断此问题的另一个复杂性是 iPad 上 iMessage 应用程序中的相同代码未达到 tableView(:moveRowAt:)。 ,但在 iPhone 上到达那里。对于 iOS 应用程序, tableView(:moveRowAt:)在 iPad 和 iPhone 上都可以访问,尽管这可能是单独的问题。

关于ios - 为什么空的 UIDragItem 数组仍然允许拖动行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45889033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com