gpt4 book ai didi

macos - 检查鼠标是否在 NSTableView 内单击

转载 作者:行者123 更新时间:2023-11-30 14:17:48 25 4
gpt4 key购买 nike

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

即使在表格行滚动到可见表格区域之外的某个位置单击,下面的代码也会让事件通过。

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!
}
});
}
}

最佳答案

等等!没说什么!经过深思熟虑,我再次想通了……我不应该检查 TableView 的边界,而应该检查它的 super View NSClipView 的边界!完全有道理,但可能不会立即显而易见。这解决了问题。

关于macos - 检查鼠标是否在 NSTableView 内单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30911539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com