我想覆盖一些WebView的编辑操作方法。因此,我创建了MyWebView,它是一个WebView子类,并重新定义了以下方法
- (void)copy:(id)sender;
- (void)cut:(id)sender;
这些方法列在公共WebView API中,即“copy:” https://developer.apple.com/library/mac/documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/Reference/Reference.html#//apple_ref/occ/instm/WebView/copy:
可悲的是,我的重新定义的方法永远不会被调用。为什么呢?
答案 0 :(得分:0)
这是因为第一个响应者是你所覆盖的其他类。但是,不能使用您想要子类的类(将其链接到WebView)。
在这种情况下,documentView(WebView-> -WebFrame-> WebFrameView-> documentView)是第一个响应者,它的实现是(检查宏[here] [1]):
#define FORWARD(name) \
- (void)name:(id)sender { [self _performResponderOperation:_cmd with:sender]; }
这段代码调用私有方法,所以这是一个死胡同。
我认为你应该尝试注入javascript来检测复制并调用负责任的Obj-C方法。第二种解决方案可能是覆盖NSApplication并检查发送的所有事件并获取您需要的事件(未验证+性能下降)。
[1] [http://www.opensource.apple.com/source/WebKit/WebKit-7537.74.9/mac/WebView/WebView.mm]