UIWebViewDelegateプロトコルはメソッドを宣言しませんscrollViewDidScroll:
。したがって、これが不正なアクセス エラーが発生する理由です。
カテゴリを作成するのではなく、サブクラス化することをお勧めしますUIWebView
(はい、ドキュメントではサブクラス化を推奨していません...それが持つメソッドをオーバーライドしないでください。安全です)。
サブクラスでは、新しいプロトコルを作成するか、単にdelegate
プロパティを上書きして、UIScrollViewDelegate に準拠することも要求できます (後者は以下に示されています)。
例:
// MyWebView.h
#import <UIKit/UIKit.h>
@interface MyWebView : UIWebView
@property (nonatomic, assign) id<UIWebViewDelegate, UIScrollViewDelegate> delegate;
@end
// MyWebView.m
#import "MyWebView.h"
@implementation MyWebView
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
/* As scrollViewDidScroll: is optional, you should check if the super class
responds to this method (it doesn't appear to now, but this may change in future) */
if ([[self superclass] instancesRespondToSelector:@selector(scrollViewDidScroll:)])
{
[super scrollViewDidScroll:scrollView];
}
/* Likewise, you should check if your own delegate responds to this selector */
if ([self.delegate respondsToSelector:@selector(scrollViewDidScroll:)])
{
[self.delegate scrollViewDidScroll:scrollView];
}
}
@end