我试图点击即可工作,这样即使窗口处于非活动状态,我的应用程序也会响应鼠标点击。我有一个带有NSCollectionView项的collectionView,它们响应鼠标事件。我已经尝试了子类化collectViewItem使用的视图,并且还子类化了用于NSCollectionView的视图。它不起作用。 子类视图的代码如下所示:
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
}
}
}
有谁知道这里出了什么问题?
答案 0 :(得分:1)
我刚看到同样的问题;子类化NSCollectionView
或封闭的NSClipView
或NSScrollView
也不适用于我。
什么有效是子类化NSView
,就像你做的那样:
class ClickThroughView: NSView {
override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
return true
}
}
...然后设置NSCollectionViewItem
的{{1}}以使用此view
课程。
请注意,例如位于ClickThroughView
前方的NSImageView
会阻止点击事件到达我们的子类,因此您需要继承ClickThroughView
以接受点击。
答案 1 :(得分:0)
您需要通过添加以下代码来更改窗口行为:
window.collectionBehavior = .stationary;
window.level = .mainMenu + 1;
window.hidesOnDeactivate = false;