UIControl 如何将所有触摸事件传递给响应者链中的下一个对象?

Posted

技术标签:

【中文标题】UIControl 如何将所有触摸事件传递给响应者链中的下一个对象?【英文标题】:How can a UIControl pass all touch events on to the next object in the responder chain? 【发布时间】:2009-08-21 17:26:59 【问题描述】:

这很棘手。我在一个很大的按钮上有个小按钮。当按下那个大按钮上的小按钮时,小按钮会做一些事情。但大的什么都不做。当然。但是现在我希望大按钮也能做一些事情,不管小按钮是否被点击。所以小按钮必须将所有触摸事件转发到那个大按钮。最简单的方法是什么?

我知道 UIView,但 UIControl 有它们自己的与 UIView 不同的触摸处理方法。在 UIView 中可能看起来像这样:

[self.nextResponder touchesBegan:touches withEvent:event];

【问题讨论】:

【参考方案1】:

可能想看看this post,它展示了合成触摸事件的方法。不过,它停止工作了一段时间。刚刚重新访问它,看起来他已经更新了它以支持 3.0,所以它可能对你有用。需要注意的是,对于运输应用来说,它可能不合法。

一种更简单的方法是在点击大按钮并将其公之于众时打破执行工作的方法(我们称之为bigButtonWork)。然后大按钮点击处理程序只是调用这个例程。当点击小按钮时,您可以选择在其处理程序内部做自己的事情或调用bigButtonWork

但我猜你希望它模拟实际被按下的大按钮(完成高亮和状态更改),所以你可能不得不走合成事件路线。

【讨论】:

【参考方案2】:

您可以实现一个协议,让大按钮从小按钮接收消息,虽然我要做的是在 UIViewController 中拥有两个按钮,但让小按钮告诉 UIViewController 它被点击(通过选择器或协议) 然后 UIViewController 可以相应地更新大按钮....更多关于协议在这里http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProtocols.html

【讨论】:

以上是关于UIControl 如何将所有触摸事件传递给响应者链中的下一个对象?的主要内容,如果未能解决你的问题,请参考以下文章

userInteractionEnabled = YES时如何将触摸事件传递给superview?

:多点触摸与手势检测

如何将触摸事件传递给 parentViewController?

被覆盖的 UIControl 或 UIView 如何知道在其上方结束的触摸事件?

将触摸事件传递给多个选项之一

UIControl 子类 - 如何停止触摸事件流?