2012-08-23 7 views
12

iOSドキュメントでは、UIWebViewクラスはUIScrollViewDelegateに準拠しています。しかし、UIWebViewインスタンスはコントローラのscrollViewDidScrollメソッドを呼び出すことはありません。代理人は、すぐに正しく設定されますUIWebViewインスタンスがscrollViewDidScrollを呼び出さないのはなぜですか?

[webView setDelegate:self]; 

webViewDidFinishLoadが正常に呼び出されます。

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

閲覧SOそのcategory solutionにつながる:

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

カテゴリーアプローチは基本的に同じないこと:デリゲートのscrollViewDidScrollメソッドを呼び出す。これは以下のように、コントローラは、両方の代表者、UIWebViewDelegateとUIScrollViewDelegateを実装しますでは、最初のアプローチはなぜ機能しないのですか?

+2

はなかったですあなたはscrollViewの代理人を設定しますか? 'webView.scrollView.delegate = self'ですか? – pawelropa

+0

いいえ、私はしませんでした。そして、はい、それは動作します! – alex

+0

したがって、 'UIWebView'インスタンスはデフォルトで' scrollViews'のデリゲートをそのインスタンスに設定しますか?そうでなければ、カテゴリアプローチはうまくいかないでしょう。 – alex

答えて

28

私の推測では、UIWebViewのデリゲートのみを設定しています。 scrollViewのデリゲートを設定してみてください。

webView.scrollView.delegate = self 

大丈夫です。

+0

私には役に立たなかった –

+1

代わりに子の 'scrollView'の' contentOffset'プロパティでKVOを使うことを検討してください。 'UIWebView'は内部的にそれを使用できるので、' UIScrollView'のデリゲートプロパティを変更することは安全である必要はありません。 – lipka

0

これは間違っています。あなたが使用する場合:

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

をあなたはUIWevViewのカスタムクラスを実装し、scrollViewDidScrollを上書きする必要が

を試すにはiOS7にページ上のデータを入力するときにフォーカスを失うと、よります:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView{ 
[super scrollViewDidScroll:scrollView]; 
[((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView];} 
関連する問題