如何使用 SwiftUI 应用“acceptsFirstMouse”来构建应用程序?

And*_*rew 6 macos swift swiftui macos-catalina

假设我有一个适用于 macOS (Catalina) 的应用程序。

这个应用程序没有隐藏。但另一个应用程序被激活(最前面/最上面)

我想捕获按钮/任何其他视图的点击(我使用的是 swiftUI,所以一切都是视图),以防点击我的应用程序。

我怎样才能做到这一点?


UPD:如何使用 SwiftUI 应用“acceptsFirstMouse”来构建应用程序?

Asp*_*eri 5

好吧,目前 SwiftUI API 中还没有这样的工具,但是......它并不是在沙漠中独立的,Apple 并没有说它是 Cocoa 的替代品,而且他们向我们展示了如何集成它们并充分利用它们两个都...

所以,这是可能的方法......

import SwiftUI
import Cocoa

// Just mouse accepter
class MyViewView : NSView {
    override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
        return true
    }
}

// Representable wrapper (bridge to SwiftUI)
struct AcceptingFirstMouse : NSViewRepresentable {
    func makeNSView(context: NSViewRepresentableContext<AcceptingFirstMouse>) -> MyViewView {
        return MyViewView()
    }

    func updateNSView(_ nsView: MyViewView, context: NSViewRepresentableContext<AcceptingFirstMouse>) {
        nsView.setNeedsDisplay(nsView.bounds)
    }

    typealias NSViewType = MyViewView
}

// Usage (somewhere in your SwiftUI view stack)
...
      Text("Click me")
        .padding(20)
        .background(Color.yellow)
        .overlay(AcceptingFirstMouse()) // must be on top (no confuse, it is transparent)
        .onTapGesture {
            print("Label tapped")
        }
...
Run Code Online (Sandbox Code Playgroud)

备份