Why does a UIWebView instance not call scrollViewD

2019-04-20 00:32发布

iOS documention says, that the UIWebView class conforms to UIScrollViewDelegate. But an UIWebView instance does not call the scrollViewDidScroll method of its controller. The delegate is set just right by

[webView setDelegate:self];

and webViewDidFinishLoad is called successfully. The controller implements both delegates, UIWebViewDelegate and UIScrollViewDelegate, like this:

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

Browsing SO leads to that category solution:

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

That category approach does basically the same: Calling the delegate's scrollViewDidScroll method. So why does the the first approach not work?

2条回答
beautiful°
2楼-- · 2019-04-20 01:12

This is not correct. If you will use:

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

You will lose focus when try to enter data on page on iOS7 and more

You need to implement custom class for UIWevView and overwrite scrollViewDidScroll:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
[super scrollViewDidScroll:scrollView];
[((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView];}
查看更多
霸刀☆藐视天下
3楼-- · 2019-04-20 01:21

My guess is you set up delegate only for UIWebView. Try setting delegate of scrollView.

webView.scrollView.delegate = self

it should be ok.

查看更多
登录 后发表回答