2011-04-07 76 views
0

我正在应用程序中动态构建大量堆栈视图,并且我最初遇到了描述here的事件处理问题。该帖子解决了我的大部分问题,但我仍然有一个问题。当用户点击rss供稿项目的摘要时,我只用一个“关闭”按钮创建一个几乎全屏的web视图。关闭按钮有效,但Web视图拒绝滚动。我使用上述链接中描述的代码的变体,这些代码旨在用于屏幕始终为1024x768的屏幕上的“屏幕”和“小工具”,但无需处理事件,但屏幕上的其他视图和按钮处理事件。一个“屏幕”有一个永远不会改变的基础模板和顶部的另一个“屏幕”,确实会改变。处理“小工具”事件调度的代码是:UIWebView不会滚动堆栈视图,子视图

@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”和“2 BTN”(见图)。我也看到,当我尝试滚动它但它仍然不滚动时,这个相同的代码返回我的UIWebVIew。 以下是意见如何堆叠图:

diagram

也许UIWebView的滚动在绕开则hitTest黑客一些特殊的方式来处理?

回答

0

我发送了一封支持电子邮件给苹果关于此事,他们可以真正说的是“UIWebView做了很多自定义触摸处理,让它难以捉摸hitTest”。所以,如果你有这种情况并想使用这个hitTest覆盖解决方案,不要指望它适用于UIWebView。在很多情况下,我可能不得不做一些设计更改,以便不以这种方式堆叠我的视图。