mouseDown: не срабатывает в подклассе WebView - PullRequest
4 голосов
/ 17 марта 2011

Я думаю, что это должно быть довольно просто, но я не могу заставить его работать.

Я хочу обнаруживать щелчки мыши в WebView ...

I 'В подклассе 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 ]

5 голосов
/ 04 марта 2014

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, в котором произошло событие щелчка.

3 голосов
/ 20 марта 2011

Проблема в том, что сообщение не отправляется в WebView. Вместо этого он отправляется в закрытый WebHTMLView внутри вашего WebView, который фактически обрабатывает события мыши.

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

Возможно, вы просто захотите изучить использование javascript в WebView для отправки событий onmousedown обратно в ваш классjective-c.

0 голосов
/ 17 марта 2011

Может быть, это поможет:

[window setAcceptsMouseMovedEvents:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...