Swift:如何使用SwiftUI将“ acceptsFirstMouse”应用于应用构建?

时间:2019-12-01 21:22:55

标签: swift macos swiftui macos-catalina

让我们想象一下,我有一个适用于MacOS(Catalina)的应用程序。

此应用未隐藏。但是另一个应用程序被激活(位于最前/最前)

我想单击按钮/其他任何视图(我正在使用swiftUI,因此都是视图)。

我该怎么做?


UPD:如何使用SwiftUI将“ acceptsFirstMouse”应用于应用构建?

1 个答案:

答案 0 :(得分:2)

好吧,目前SwiftUI API中没有这样的工具,但是...在沙漠中并不是独立的,苹果公司也没有说它是可可的替代品,而且它们向我们展示了如何集成它们并充分利用两者的优势...

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

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")
        }
...