12

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

[webView setDelegate:self];

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

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

浏览 SO 会导致该类别解决方案

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

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

4

2 回答 2

29

我的猜测是您仅为 UIWebView 设置委托。尝试设置滚动视图的委托。

webView.scrollView.delegate = self

应该没问题。

于 2012-08-23T14:37:04.347 回答
0

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

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

尝试在 iOS7 等页面上输入数据时会失去焦点

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

- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
[super scrollViewDidScroll:scrollView];
[((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView];}
于 2015-01-20T09:31:40.727 回答