我正在开发一个动态构建大量堆叠视图的应用程序,我最初遇到了here所述的事件处理问题。那篇文章解决了我的大多数问题,但我还有一个问题。当用户点击rss Feed项的摘要时,我只用一个“关闭”按钮创建一个几乎全屏的Web视图。关闭按钮有效,但Web视图拒绝滚动。我使用了上述链接中描述的代码的变体,这些代码适用于那些屏幕始终为1024x768的“屏幕”和“小工具”,但从不需要处理事件,而是在这些屏幕上处理其他视图和按钮处理事件。 “屏幕”具有永不改变的基本模板,并且顶部的另一个“屏幕”确实发生变化。处理“小工具”事件调度的代码是:
@implementation ContainerView
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
for (int i=self.subviews.count-1; i >= 0; i--) {
UIView *view = [self.subviews objectAtIndex:i];
BOOL isContainerView = [view isMemberOfClass:[ContainerView class]];
if (isContainerView) {
return [super hitTest:point withEvent:event];
}
else {
CGPoint viewPoint = [view convertPoint:point fromView:self];
if ([view pointInside:viewPoint withEvent:event]) {
return view;
}
}
}
return nil;
}
@end
这正确地将事件调度到“Btn 1”和“Btn 2”(参见图表)。我也看到当我尝试滚动它时,同样的代码返回我的UIWebVIew,但它仍然不滚动。 以下是视图如何叠加的图表:
也许UIWebView滚动是以某种特殊方式处理的,它绕过了hitTest黑客攻击?
答案 0 :(得分:0)
我向Apple发送了一封关于此事的支持电子邮件,他们真正说的是“UIWebView做了大量的自定义触摸操作,这使得难以接受hitTest”。因此,如果您遇到这种情况并希望使用此hitTest覆盖解决方案,请不要指望它适用于UIWebView。在可能的情况下,我可能不得不进行一些设计更改,以便不以这种方式叠加我的观点。