iphone - 如何将 "transfer"第一响应者从一个 UIView 转移到另一个 UIView?

标签 iphone uiview uibutton uitouch first-responder

我有一个 UIView 子类(用于此问题的 CustomView ),它有自己的所有 touches 事件(开始、移动、结束、取消)处理。我还有一个 UIButton,它是与它重叠的 CustomView 的同级。

例如,我的 View 层次结构如下所示:

  • UIView( Controller View )
    • 带有框架 (0, 0, 300, 300) 的 CustomView
    • 带有框架 (0, 0, 100, 50) 的 UIButton

我希望 CustomView 在用户拖出 UIButton 后捕获触摸事件。通过调试日志记录,似乎 UIControlEventTouchDragExit 事件是要拦截的事件(尽管直到触摸距离按钮大约 100 像素时才会触发,但这对于这个问题并不重要) .

理想情况下,当拖动退出事件被触发时,按钮将停止接收触摸移动事件,CustomView将获得一个touchesBegan事件(即使我需要以某种方式自己伪造一个事件),并且所有 future 的触摸事件(touchesMoved 等)将被发送到 CustomView。

我尝试了以下方法,但没有任何效果:

-(void)btnTouchDragExit:(id)sender
{
    UIButton * btn = sender;
    [btn resignFirstResponder];
    [customView becomeFirstResponder];
}

我认为底层 UITouch 对象(在触摸事件中是一致的)没有被重定向到指向 CustomView。怎样才能达到想要的效果?

最佳答案

只需使用 hitTest:withEvent: 来确定哪个 View “应该”接收事件,然后将事件转发到适当的 View 。在事件到达按钮之前,您可能需要做一些操作来拦截事件,但这就是 hitTest:withEvent: 的用途。

关于iphone - 如何将 "transfer"第一响应者从一个 UIView 转移到另一个 UIView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1418685/

相关文章:

php - iPhone 收不到推送通知

iphone - 更新 UITableViewCell 而不重新加载

ios - 设备旋转时调整 inset UITextView 的大小

swift - 关于如何在按住按钮时隐藏 View

ios - 无法点击 UIButton iphone

iphone - 如何创建椭圆形UIButton

iphone - 如何制作一个不使用 nib 文件的基于 View 的应用程序?

ios - 使用 CFTreeContext 信息对象将 NSString 数据存储在 CFTreeRef 中是一种好习惯吗

ios - UIButton 不在两个图像之间切换 Swift 4.2

ios - 获取最后十个 firebase 值并将它们分配给十个 UIButton 的标题