ios - 添加实现 UIWebView(CustomScroll)

标签 ios objective-c cocoa uiwebview

我正在尝试添加 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/

相关文章:

ssh - 如何使用 libssh2 进行动态端口转发?

objective-c - 我如何从 Objective C KVO 中的 observationInfo 方法获取信息?

ios - 尝试在 Swift 3 中保存自定义对象时尝试插入非属性列表对象

iphone - ipad预编译器

ios - UICollectionViewDataSource 无法执行 "fix it",在 Xcode 9.3.1 中为 "Candidate is not a function"

iphone - 更改 NSIndexPath 对象的值

c++ - 使用 ARC 在 C 函数中取消引用 self,引用作为 intptr_t 传递

ios - 当尝试获取 SPTArtist 对象和关联的封面艺术品时,artistWithURI 异常

iphone - 如何使UIPickerView像UIDatePicker一样?

iphone - 我可以使用此代码依赖此 "default"更新间隔(加速计)吗?