我正在尝试将此添加到我的代码中
@implementation UIWebView(CustomScroll)
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
[self.delegate scrollViewDidScroll: scrollView];
}
@end
但是得到“没有选择器'scrollViewDidScroll:'的已知实例方法”我在这里错过了什么?
我正在尝试将此添加到我的代码中
@implementation UIWebView(CustomScroll)
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
[self.delegate scrollViewDidScroll: scrollView];
}
@end
但是得到“没有选择器'scrollViewDidScroll:'的已知实例方法”我在这里错过了什么?
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