【发布时间】:2012-08-23 14:21:16
【问题描述】:
iOS 文档说,UIWebView 类符合 UIScrollViewDelegate。但是 UIWebView 实例不会调用其控制器的scrollViewDidScroll 方法。委托正好由
[webView setDelegate:self];
并且webViewDidFinishLoad 被成功调用。控制器实现了两个委托,UIWebViewDelegate 和 UIScrollViewDelegate,如下所示:
@interface WebviewController : UIViewController<UIWebViewDelegate, UIScrollViewDelegate>{
UIWebView *webView;
}
浏览 SO 导致 category solution:
@implementation UIWebView(CustomScroll)
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
[self.delegate scrollViewDidScroll: scrollView];
}
@end
该类别方法的作用基本相同:调用委托的 scrollViewDidScroll 方法。那么为什么第一种方法不起作用呢?
【问题讨论】:
-
你为scrollView设置代理了吗?
webView.scrollView.delegate = self? -
不,我没有。是的,这行得通!
-
那么,
UIWebView实例默认将其scrollViews的委托设置为该实例?看起来......否则类别方法将不起作用。 -
要工作,此代码必须在类别 scrollView 委托内设置为 webview,然后在 UIWebView(CustomScroll) scrollViewDidScroll 内将此消息通过 self.delegate(这是 UIWebView 的委托)发送到响应的对象到 webView 委托。所以是的,这段代码可以工作。