首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIResponder链问题

UIResponder链问题
EN

Stack Overflow用户
提问于 2010-11-04 03:18:08
回答 1查看 1.5K关注 0票数 1

我不太了解修改响应器链的细节,所以如果这是愚蠢的,请不要抨击我;)

基本上,我有两个视图堆栈(蓝色)作为父视图(红色)的子视图

它们都在某个时间点占据了父视图的整个帧,所以很明显,只有顶部的那个会获得触摸事件,这些事件会向上传播到父视图(红色)并继续到窗口。

在某些情况下,我希望触摸输入由“其他”视图堆栈的合格子视图拾取。也就是说,如果当前最顶层的视图已将userinteractionenabled设置为no,则将接收这些输入的视图。

设置userinteractionenabled是可行的,但我觉得这是一个肮脏的技巧。要点是这个topmot视图基本上是透明的,我希望当事件在指定的区域中被触摸时,会在另一个堆栈中结束。

这是一张有助于视觉解释的图片,请记住,这两种蓝色视图都是100%的父视图。

http://c.crap.ps/35a5

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-04 04:27:11

您可以覆盖每个视图中的hitTest:withEvent:,以控制谁可以“使用”触摸。

在您的示例中,我假设绿色区域是您希望使用触摸事件的子视图。如果是这样,那么对hitTest方法尝试如下所示:

代码语言:javascript
复制
-(UIView*) hitTest:(CGPoint)point withEvent:(UIEvent *)event {  
    UIView *hitView = [super hitTest:point withEvent:event];
    return (hitView == self) ? nil : hitView;
}

此方法检查触摸是否命中任何子视图。如果是,则让该子视图使用触摸,否则让触摸在层次结构中继续。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4090769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档