2012-02-29 34 views
2

所以我有以下代码:设置UIWebView的滚动视图代表将导致错误

NSString *currSysVer = [[UIDevice currentDevice] systemVersion]; 
    if ([currSysVer compare:@"5.0" options:NSNumericSearch] != NSOrderedAscending) { 
     webScrollView = self.webView_.scrollView; 
    } else { 
     webScrollView = [self.webView_ defaultScrollView]; 
    } 

webScrollView.delegate = self 

,当我滚动它给了我:

-[UIWebView scrollViewDidScroll:]: unrecognized selector sent to instance 0x8e8610 

这样做没有任何意义,为什么一个UIWebView正在调用scrollViewDidScroll \

+0

你在哪里分配webScrollView解决? – Stavash 2012-02-29 19:59:44

回答

1

如果你看起来here,UIWebView符合UIScrollViewDelegate。实质上,它使用相同的委托,因为UIWebView是可滚动的(您可能会说它是UIScrollView的子类,尽管在文档中没有明确说明,但UIScrollView可能是WebView的一部分)。

+0

嗯......所以我如何让这项工作不会崩溃? – adit 2012-02-29 20:03:37

+0

再看看你的代码,这将有助于看到你在哪里定义webScrollView和webView。您是否在任何这些线路上发现了您忽略的警告?你是否在任何地方手动调用scrollViewDidScroll? – JKomusin 2012-02-29 21:15:18

0

UIWebView HAS-A一scrollView其中的是代表,这意味着scrollViewDidScroll:方法由UIWebView实现的,因为你正在使用的UIWebView提供给它的scrollView参考,你现在说你会处理这个回调,包括scrollViewDidScroll:,显然你不是这个原因,当委托调用发生时它失败了。

你为什么试图分配作为webview滚动视图的委托?,该行为已经实现。我不确定如果你试图改变这种行为,它会发挥很好的作用,但是无论哪种情况,如果你想成为scrollView的委托,那么你必须实现UIScrollViewDelegate协议,然后实现所需的方法。

0

我已经找到了所有版本

UIScrollView* sv = nil; 
    for (UIView* v in _webview.subviews) { 
     if([v isKindOfClass:[UIScrollView class]]){ 
      sv = (UIScrollView*) v; 
      sv.scrollEnabled = NO; 
      sv.bounces = NO; 

    } 
}