我正在尝试添加 this到我的代码
@implementation UIWebView(CustomScroll)
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
[self.delegate scrollViewDidScroll: scrollView];
}
@end
但是得到“选择器‘scrollViewDidScroll:’没有已知的实例方法” 我在这里缺少什么?
最佳答案
UIWebViewDelegate协议(protocol)未声明方法 scrollViewDidScroll:
。因此,这就是您收到错误访问错误的原因。
我建议您将 UIWebView
子类化,而不是尝试在其上创建类别(是的,文档建议不要子类化...只是不要覆盖它具有的任何方法,而且很安全)。
在您的子类上,您可以创建一个新协议(protocol)或简单地覆盖 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
关于ios - 添加实现 UIWebView(CustomScroll),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15560410/