0

我正在尝试将此添加到我的代码中

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

但是得到“没有选择器'scrollViewDidScroll:'的已知实例方法”我在这里错过了什么?

4

1 回答 1

3

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
于 2013-03-22T00:05:56.930 回答