acceptedFirstMouse点击进入macOS

时间:2018-02-20 05:02:32

标签: swift macos cocoa subclass nscollectionview

我试图点击即可工作,这样即使窗口处于非活动状态,我的应用程序也会响应鼠标点击。我有一个带有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
      }
  }    
}

有谁知道这里出了什么问题?

2 个答案:

答案 0 :(得分:1)

我刚看到同样的问题;子类化NSCollectionView或封闭的NSClipViewNSScrollView也不适用于我。

什么有效是子类化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;