Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何替换UIWebView的方法而不是受限子类化?_Iphone_Ios_Ipad_Uiwebview_Subclassing - Fatal编程技术网

Iphone 如何替换UIWebView的方法而不是受限子类化?

Iphone 如何替换UIWebView的方法而不是受限子类化?,iphone,ios,ipad,uiwebview,subclassing,Iphone,Ios,Ipad,Uiwebview,Subclassing,UIWebView的子类化受到Apple的限制。但我需要将方法canperformation替换为以下方法: -(BOOL) canPerformAction:(SEL)action withSender:(id)sender { if ((action == @selector(Copy:)) || (action == @selector(Paste:))) { return YES; } else { return NO; } }

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

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

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

要替换类中的函数,可以使用方法swizzling。有一个很好的图书馆,为你提供一切服务

您只需在UIWebView上创建一个类别,该类别实现了
myCanPerformAction:withSender:

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

虽然不确定这是否是一种好的做法…

替换的方法工作得很好,但
UIWebView的弹出菜单上的讨厌的项目仍然存在:((听起来很奇怪,但是如果你在函数内部调用你的函数,它实际上会调用被替换的函数……方法A被方法B替换。现在我想在B内部调用A。怎么做?
-(void)B{[self B];}
它看起来会导致循环,但是当你从B内部调用B时,它实际上调用了A。但是你知道如何修复它吗?
-(BOOL) myCanPerformAction:(SEL)action withSender:(id)sender {
    if ((action == @selector(Copy:)) || (action == @selector(Paste:))) {
        return YES;
    } else {
        return NO;
    }
}