Cocoa webview忽略没有内容的区域中的鼠标事件

时间:2012-01-31 03:26:37

标签: cocoa webview mouseevent

我有一个透明的Web视图,它是一个大矩形。它加载的网页有较小的矩形,不会填满整个网页视图。因此,在那些没有被div占用的空间中,您可以通过Web视图查看后面的任何窗口或应用程序。虽然你可以透视,但你无法点击。 我需要能够点击其中没有活动内容的部分网页视图。 有什么想法吗?

我的一个想法是在Web视图的顶部有一个透明的nsview,拦截鼠标,获取坐标,然后在Web视图中引用该坐标,并查看那里是否有活动内容,如果有,则传递将事件鼠标按下到Web视图,但如果没有,则忽略它/传递它。这对我来说很有意义,但我不知道如何实现这一目标......

1 个答案:

答案 0 :(得分:3)

您需要继承WebView并实现hitTest:方法。在您的方法中,您需要进行测试以查看鼠标是否位于Web视图的“活动”区域之一,如果不是,则返回视图的下一个响应者作为通过命中测试的视图。

//assume activeRect is some rect in your view that you want to accept mouse clicks on

- (NSView*)hitTest:(NSPoint)aPoint
{
    if(NSPointInRect([self convertPoint:aPoint fromView:nil], activeRect))
    {
        //if the mouse is in an active area then just perform the default operation
        return [super hitTest:aPoint];
    }
    //otherwise return the next responder
    return (NSView*)[self nextResponder];
}