拖放防止多个项目同时移动

Posted

技术标签:

【中文标题】拖放防止多个项目同时移动【英文标题】:Drag and drop prevent multiple item to move at the same time 【发布时间】:2014-12-16 18:38:00 【问题描述】:

在 UIScrollview 中,我有多个继承自 UIView 且可拖动的自定义子视图。除了我能够同时拖动两个或多个子视图之外,一切都很好。手势识别器附加到我的自定义子视图并在此类中实现。 有什么办法可以防止这种行为吗?

编辑:我已经尝试添加委托

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool 
return false

但它不起作用,因为所有子视图都处理自己的手势识别器。

【问题讨论】:

【参考方案1】:

GestureRecognizerDelegate 协议具有指定多个手势识别器是否可以同时动作的功能。我不知道这是否适用于您的情况,但值得一试:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool 
    return false

【讨论】:

我试过了,但是由于手势委托和代码在子视图中,我似乎不起作用。【参考方案2】:

我知道这是一个老问题,但我遇到了同样的问题,我希望同时只有一个项目可以拖动。您可以遍历所有可拖动的子视图并更新它们的属性,如下所示。

           subiew.isExclusiveTouch = true
    subview.isMultipleTouchEnabled = false

现在只能同时拖动一个子视图。

【讨论】:

这个问题有 7 年历史了。它很可能不再需要答案,并且使用的版本发生了变化。 @Gugu72 我今天遇到了这个问题。我尝试寻找答案,但在任何地方都找不到。因此,当我找到答案时,我将其发布给可能正在寻找它的人。版本可能会改变,但逻辑不会。

以上是关于拖放防止多个项目同时移动的主要内容,如果未能解决你的问题,请参考以下文章

Angular CDK 拖放:不要移动源项目

jQuery UI 可拖放项目

角度材质嵌套拖放

QTreeView - 如何判断拖放事件是重新排序还是父母之间的移动?

在 PyQt 中使用拖放重新排序 QTreeWidget 中的项目

Qt拖放:启用复制时无法移动(Ubuntu Gnome)