Ios 为什么空UIDragItem数组仍然允许拖动行?

Ios 为什么空UIDragItem数组仍然允许拖动行?,ios,uitableview,uidragitem,Ios,Uitableview,Uidragitem,在表视图中实现IOS11拖放。如果我不想拖动第一行,我假设我从tableView返回一个空数组(:itemsForBeginning:) 不允许用户拖动内容时返回空数组 从指定的索引路径 但即使验证了[]已返回,拖动仍会发生。这意味着要么我搞砸了,要么该功能没有按文档所述实现。我总是犹豫是否认为它是其他人,所以我的问题是,返回[]作为实现是否应该防止拖动0行?是否有其他人对此进行验证,或将其显示为文件所示的工作状态 谢谢 编辑:WWDC视频中的示例代码包括以下区块: if tableVi

在表视图中实现IOS11拖放。如果我不想拖动第一行,我假设我从tableView返回一个空数组(:itemsForBeginning:)

不允许用户拖动内容时返回空数组 从指定的索引路径

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

这是否意味着如果不返回任何拖动项,表视图仍将允许拖动?!?!那么,如何防止一行被拖拽呢?

多亏@Losiowaty指向了有用的方向

我知道在tableView中,如果只有一个
UIDragItem
,drop委托将查看
tableView(:moveRowAt:)
。我在任何地方都没有看到文档,它还通过
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上都可以看到,尽管这可能是一个单独的问题。

当你只做
return[]
时,是否也会发生同样的事情?是的,对于纯
return[]
你是否允许编辑tableView,即重新排序行的旧方法?@Losiowaty,你找到了答案。如果你想贴,我会让你接受的。如果没有,我会把它寄出去。这与canMoveRowAt有关,我在10.x版中做得很好,但在11.x版中有一点扭曲。谢谢你的提问@JKaz继续发帖,我很乐意投票:)我所做的只是给你一个正确方向的提示。
// 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
}