如果我创建一个WebView并将其添加到NSThemeFrame,如下所示:
让window成为我正在添加的NSWindow实例:
NSView * themeFrame = window.contentView;
[themeFrame.superview addSubview:myWebView];
然后任何:我加载的页面中的元素悬停标签不再起作用。但是,:hover确实出现在mouseDown / mouseUp上。所以这可能是一个刷新问题。我尝试在mouseMoved中调用[myWebView setNeedsDisplay:YES]:但没有运气。
contentView有什么特别之处吗?我尝试使用NSView进行相同的操作并覆盖其mouseMoved:方法,同时调用setNeedsDisplay并且NSView处理了mouseMove。有什么特别的东西:悬停?
欢迎任何想法或谣言!
我可能遇到与Cocoa WebView on os X not firing mouse hover events without having to click and hold left mouse key相同的问题,但那里没有答案。
答案 0 :(得分:1)
我有类似的问题,在调试和阅读WebKit的源代码后,我找到了一个解决方案。关键部分似乎是WebHTMLView class,特别是方法-[WebHTMLView _updateMouseoverWithEvent:]
。检查视图的窗口是否是一个关键窗口,果然,即使我在其上调用makeKeyWindow
,我的窗口也不是关键。
我的窗口是文档窗口的子窗口,为了解决悬停问题,我创建了一个NSWindow
子类并覆盖isKeyWindow
,如下所示:
- (BOOL)isKeyWindow
{
return [super isKeyWindow] || [[self parentWindow] isKeyWindow];
}
这使得悬停在我的文档的子窗口中的WebView中工作。