我正在尝试让点击通过工作,以便我的应用程序即使在窗口处于非事件状态时也能响应鼠标点击。我有一个 collectionView,其中包含响应鼠标事件的 NSCollectionView 项。我已经尝试对 collectViewItem 使用的 View 进行子类化,并且还对用于 NSCollectionView 的 View 进行子类化。它不起作用。 子类 View 的代码如下所示:
import Cocoa
class SubclassedView: NSView {
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
}
// adding this override should allow click-through so buttons can be clicked even with an inactive window
// it doesn't work
override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
print("got first mouse")
return true
}
override var acceptsFirstResponder :Bool {
get {
return true
}
}
}
有人知道这里出了什么问题吗?
最佳答案
我刚看到同样的问题;子类化 NSCollectionView
或封闭的 NSClipView
或 NSScrollView
对我也不起作用。
有效的方法是子类化 NSView
,就像您所做的那样:
class ClickThroughView: NSView {
override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
return true
}
}
...然后设置 NSCollectionViewItem
的 view
以使用此 ClickThroughView
类。
请注意,例如位于我们的 ClickThroughView
前面的 NSImageView
将阻止点击事件到达我们的子类,因此您需要子类化 NSImageView
以接受点击率也是如此。
关于swift - acceptsFirstMouse 在 macOS 上点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48878171/