Iphone 如何替换UIWebView的方法而不是受限子类化?
UIWebView的子类化受到Apple的限制。但我需要将方法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; } }
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;
}
}