为什么一个UIWebView实例不能调用scrollViewDidScroll?

iOS文档说, UIWebView类符合UIScrollViewDelegate。 但是UIWebView实例不会调用其控制器的scrollViewDidScroll方法。 代表就在正确的位置

 [webView setDelegate:self]; 

并且webViewDidFinishLoad被成功调用。 控制器实现了两个委托,UIWebViewDelegate和UIScrollViewDelegate,如下所示:

 @interface WebviewController : UIViewController<UIWebViewDelegate, UIScrollViewDelegate>{ UIWebView *webView; } 

浏览SO导致该类别的解决scheme :

 @implementation UIWebView(CustomScroll) - (void) scrollViewDidScroll:(UIScrollView *)scrollView{ [self.delegate scrollViewDidScroll: scrollView]; } @end 

该类别方法基本相同:调用委托的scrollViewDidScroll方法。 那么为什么第一种方法不起作用呢?

我的猜测是你只为UIWebView设置委托。 尝试设置scrollView的委托。

 webView.scrollView.delegate = self 

应该没问题。

这是不正确的。 如果您将使用:

 @implementation UIWebView(CustomScroll) - (void) scrollViewDidScroll:(UIScrollView *)scrollView{ [self.delegate scrollViewDidScroll: scrollView]; } @end 

尝试在iOS7及更多页面上input数据时,您将失去焦点

您需要为UIWevView实现自定义类并覆盖scrollViewDidScroll:

 - (void) scrollViewDidScroll:(UIScrollView *)scrollView{ [super scrollViewDidScroll:scrollView]; [((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView];}