swift - acceptsFirstMouse 在 macOS 上点击

标签 swift macos cocoa subclass nscollectionview

我正在尝试让点击通过工作,以便我的应用程序即使在窗口处于非事件状态时也能响应鼠标点击。我有一个 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 或封闭的 NSClipViewNSScrollView 对我也不起作用。

有效的方法是子类化 NSView,就像您所做的那样:

class ClickThroughView: NSView {
    override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
        return true
    }
}

...然后设置 NSCollectionViewItemview 以使用此 ClickThroughView 类。

请注意,例如位于我们的 ClickThroughView 前面的 NSImageView 将阻止点击事件到达我们的子类,因此您需要子类化 NSImageView 以接受点击率也是如此。

关于swift - acceptsFirstMouse 在 macOS 上点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48878171/

相关文章:

ios - Google 日历 API 删除/更新重复事件在 URLSession 上返回 412

ios - TabBar 项目图像大小

macos - 命令行工具 bash (git) 无法工作 - macOS Sierra 最终候选版本

objective-c - 如何约束NSSplitView?

objective-c - 使用 Ruby 而不是 AppleScript 使 Cocoa 应用程序可编写脚本

macos - 基于 View 的 TableView 在基于 View 的 TableView 中

ios - 用于本地化的 UITableView 单元格中的镜像

ios - 什么时候更新 UITableView 高度 NSLayoutConstraint 最合适

objective-c - NSLayoutManager Text 新行似乎从矩形底部开始向上

macos - OpenSSL crate 在 Mac OS X 10.11 上编译失败