如何替换UIWebView的方法而不是限制子类?

时间:2012-11-05 14:21:27

标签: iphone ios ipad uiwebview subclassing

UIWebView的子类化受Apple限制。但我需要将方法canPerformAction替换为以下方法:

-(BOOL) canPerformAction:(SEL)action withSender:(id)sender {
    if ((action == @selector(Copy:)) || (action == @selector(Paste:))) {
        return YES;
    } else {
        return NO;
    }
}

如何在没有子类化的情况下替换此方法?非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

要替换类中的函数,可以使用方法调配。有一个很好的库可以为你完成所有事情,称为JRSwizzle

[[UIWebView class] jr_swizzleMethod:@selector(canPerformAction:withSender:) withMethod:@selector(myCanPerformAction:withSender:) error:nil];

您需要做的就是在UIWebView上创建一个实现myCanPerformAction:withSender:

的类别
-(BOOL) myCanPerformAction:(SEL)action withSender:(id)sender {
    if ((action == @selector(Copy:)) || (action == @selector(Paste:))) {
        return YES;
    } else {
        return NO;
    }
}

不确定这是不是很好的做法......