ios - 是否可以在不子类化的情况下替换UIWebView中现有方法的主体

标签 ios uiwebview objective-c-runtime uiresponder

我是否有可能在运行时替换UIWebView的方法体,这很有趣?
我不能继承UIWebView

例如,我需要实现:

- (void) paste:(id)sender;
or
- (BOOL) canPerformAction:(SEL)action withSender:(id)sender;

最佳答案

您是否尝试过运行时方法method_setImplementation

像这样:

static IMP originalPaste = NULL;

void myPaste(id rcv, SEL cmd, id sender)
{
    // Your implementation here
}

…
{
    …
    Method m = class_getInstanceMethod([UIWebView class], @selector(paste:));
    originalPaste = method_setImplementation(m, myPaste);
    …
}

使用originalPaste,您可以在实现中执行 super 调用。

关于ios - 是否可以在不子类化的情况下替换UIWebView中现有方法的主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11345864/

相关文章:

ios - 创建一个 UIView 捕捉点击,但对所有其他手势透明

ios - 如果首先在 OPENTOK 中创建流,则无法获取视频

ios - 在 WKWebView 中隐藏键盘附件栏

objective-c - 是否可以在运行时定义 C 函数?

ios - 交互转场+结束动画怎么做?

ios - 如何使用 ReactiveCocoa 知道所有对象何时异步保存

ios - 使用自定义 NSURLProtocol 在 UIWebView 中通过 AJAX 调用加载文本文件失败

iOS - 捕获 UIWebView 到图像

Objective-C 属性表达式地址

objective-c - GNU Objective-C 运行时技巧