【问题标题】:Dragging a subview of a view to its parent view将视图的子视图拖到其父视图
【发布时间】:2025-12-10 09:10:01
【问题描述】:

我已经寻找解决方案几个小时了。虽然我可以找到类似的问题,但我没有得到答案。请帮我解决一下这个。情况如下。

我正在开发一个 iPad 应用程序。我在根视图 A 内的 UIScrollView B 中有一个自定义 UIControl(UIControl 的子类)对象 C。所以父子关系是这样的:A -> B -> C。我想要做的是拖动我的自定义 UIControl C 到根视图 A。这就是我所做的。

因为 C 是 UIControl,所以我向它注册了 UIControlEventTouchDownUIControlEventTouchDragInside 事件来跟踪手指的移动。然而,注册的方法只在 C 的框架内被触发。当我的手指触摸框架内部时,它就起作用了。当我将它拖到 C 的框架外到 B 再到 A 时,我丢失了手指移动事件。我想知道这样做的正确方法是什么。

【问题讨论】:

    标签: ios iphone drag-and-drop


    【解决方案1】:

    http://developer.apple.com/library/ios/#documentation/uikit/reference/UIControl_Class/Reference/Reference.html

    UIControlEventTouchDragInside 只会注意到视图边界内的拖动事件。您还需要将 UIControlEventTouchDragOutside 添加到 C 视图,或者您可以收到所有触摸的通知并找出触摸在 X、Y 上的位置,并查看触摸的坐标是否在您的 C 视图内,然后使用它在触摸结束和触摸拖动期间。

    【讨论】:

    • 酷!对 C 视图使用 UIControlEventTouchDragOutside 是可行的。对于您的第二种方法,我必须覆盖根视图 A 的 hitTest:withEvent: 以捕获触摸事件。我说的对吗?