2011-03-17 72 views
3

我认为这应该很简单,但我无法使其工作。mouseDown:未在WebView子类中触发

我想检测上的WebView鼠标点击...

我子类的WebView,这里是代码

#import <AppKit/AppKit.h> 
#import <Foundation/Foundation.h> 
#import <WebKit/WebKit.h> 

@interface ResultsWebView : WebView { 
} 
@end 

#import "ResultsWebView.h" 

@implementation ResultsWebView 

- (void)mouseDown:(NSEvent *)theEvent { 
    NSLog(@"%@", theEvent); 
} 

@end 

在我的厦门国际银行文件,我添加了一个WebView,然后将该类更改为ResultsWebView。

我在运行时检查,对象是ResultsWebView,但mouseDown事件不会被调用......

我缺少什么?

回答

3

的问题是,该消息不被发送到的WebView。相反,它会发送到WebView中的专用WebHTMLView,它实际上处理了鼠标事件。

http://trac.webkit.org/browser/trunk/Source/WebKit/mac/WebView/WebHTMLView.mm#L3555

你可能只是想看看使用javascript在网页视图的onmousedown事件事件发回给你的Objective-C类。

+0

谢谢,这向我指出了正确的方向。 – 2011-03-21 14:30:17

+0

另一种方法是重写-hitTest:并使用它将鼠标向下事件重定向到适合您的自定义视图。 – 2012-05-15 09:33:10

+0

或者另一个类似的选择是简单地创建一个叠加视图,记录该事件并将其转发给您的webView。 – uchuugaka 2015-09-20 15:31:08

-2

也许这会有所帮助:

[window setAcceptsMouseMovedEvents:YES]; 
+0

没有它不...我把它添加到的applicationDidFinishLaunching:应用程序的委托方法,但它并没有无论如何@buchstaben改变anything.But感谢 – 2011-03-17 17:44:11

4

WebUIDelegate进入营救状态。

假设你在你的NSWindowController有一个的WebView实例:

WebView *aWebView; 

您可以将控制器UIDelegate,如下:

[aWebView setUIDelegate:self]; 

控制器内实现下面的方法,你会有一种控制鼠标点击事件的形式:

- (void)webView:(WebView *)sender mouseDidMoveOverElement: 
(NSDictionary *)elementInformation modifierFlags:(NSUInteger) 
modifierFlags 
{ 
if ([[NSApp currentEvent] type] == NSLeftMouseUp) 
    NSLog(@"mouseDown event occurred"); 
} 

作为奖励,使用elementInformation字典可以获得有关发生单击事件的DOM元素的其他信息。

+1

很好的解决方案!在我的情况下,我使用:[[NSApp currentEvent] type] == NSLeftMouseUp && [[NSApp currentEvent] clickCount == 2]截获一个doubleClick事件 – Christophe 2015-06-11 10:08:17

+0

您能否帮助解决这个问题? http://stackoverflow.com/a/31211373/1657630 – micfan 2015-07-03 17:13:54

相关问题