检查鼠标是否在NSTableView内部被点击 [英] check whether mouse was clicked inside NSTableView

查看:321
本文介绍了检查鼠标是否在NSTableView内部被点击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 NSTableView 子类中有一些鼠标点击检查代码,可以拦截和修改鼠标事件,允许点击表格内的按钮,但问题是这些如果鼠标在任何其他位置单击,而不仅仅是在表上,事件也会被拦截。我的问题因此:如何检查 NSPoint.locationInWindow 是否只在表的可见范围内?

I have some mouse click-checking code in a NSTableView subclass that can intercept and modify mouse events to allow for clicking of buttons inside the table but the problem is that these events are also intercepted if the mouse is clicked anywhere else, not just on the table. My question therefore: How can I check if NSPoint.locationInWindow is within ONLY the table's visible bounds?

我的代码下面允许事件通过,即使点击表行在可见表区域之外滚动的地方。

My code below lets the event through even if clicked somewhere where a table row is scrolled beyond the visible table area.

class ButtonTableView : NSTableView
{
    var isAtForeground:Bool = false;

    override init(frame frameRect:NSRect) {
        super.init(frame: frameRect);
    }

    required init?(coder:NSCoder) {
        super.init(coder: coder);
        addEventInterception();
    }

    func addEventInterception() {
        NSEvent.addLocalMonitorForEventsMatchingMask(.LeftMouseDownMask, handler: {
            (theEvent) -> NSEvent! in

            /* Don't bother if the table view is not in the foreground! */
            if (!self.isAtForeground) { return theEvent; }

            var e:NSEvent? = theEvent;
            let p:NSPoint = theEvent.locationInWindow;

            // Check for click within table bounds
            let tableBoundsInWindowCoords:NSRect = self.convertRect(self.bounds, toView: nil);
            if (CGRectContainsPoint(tableBoundsInWindowCoords, p))
            {
                // This gets through even if clicked on table rows that are scrolled-out and not within the table's visible area!
            }
        });
    }
}


推荐答案

!没说什么!我再次想出了在彻底沉思...我不应该检查表视图的边界,但它的超视, NSClipView !具有完全的意义,但可能不会立即显而易见。这解决了问题。

Wait! Say nothing! I once again figured it out after thorough contemplation ... I shouldn't check bounds of the table view but of its superview, the NSClipView! Makes total sense but might not be instantly obvious. This fixed the issue.

这篇关于检查鼠标是否在NSTableView内部被点击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆