mouseDown:不在WebView子类中触发

时间:2011-03-17 15:30:07

标签: objective-c cocoa macos

我认为这应该很简单,但我不能让它发挥作用。

我想检测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

在我的xib文件中,我添加了一个WebView,然后将该类更改为ResultsWebView。

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

我错过了什么?

3 个答案:

答案 0 :(得分:5)

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 :(得分:3)

问题是邮件未发送到WebView。相反,它被发送到WebView中的私有WebHTMLView,它实际上处理鼠标事件。

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

您可能只想在WebView中使用javascript将onmousedown事件发送回Objective-c类。

答案 2 :(得分:-2)

也许这会有所帮助:

[window setAcceptsMouseMovedEvents:YES];