UIWebView不会滚动堆叠视图,子视图

时间:2011-04-07 21:37:40

标签: cocoa-touch ipad

我正在开发一个动态构建大量堆叠视图的应用程序,我最初遇到了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,但它仍然不滚动。 以下是视图如何叠加的图表:

diagram

也许UIWebView滚动是以某种特殊方式处理的,它绕过了hitTest黑客攻击?

1 个答案:

答案 0 :(得分:0)

我向Apple发送了一封关于此事的支持电子邮件,他们真正说的是“UIWebView做了大量的自定义触摸操作,这使得难以接受hitTest”。因此,如果您遇到这种情况并希望使用此hitTest覆盖解决方案,请不要指望它适用于UIWebView。在可能的情况下,我可能不得不进行一些设计更改,以便不以这种方式叠加我的观点。