# SwiftUI Klicken Sie auf Schaltflächen auf einem inaktiven NSWindow und lassen Sie die Schaltflächen standardmäßig das Mausereignis verarbeiten, nicht das Fenster

NSView hat die Methode acceptsFirstMouse (opens new window) überschrieben, die immer true zurückgibt. Fügen Sie in SwiftUI-Ansichten diese überschriebene Ansicht als Überlagerung hinzu.

import SwiftUI
import Cocoa

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

// Darstellbarer Wrapper (Bridge zu 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
}

// Verwendung (irgendwo in Ihrem SwiftUI-View-Stack)
Text("Klicke mich")
  .padding(20)
  .background(Color.yellow)
  .overlay(AcceptingFirstMouse()) // muss oben sein (kein Durcheinander, es ist transparent)
  .onTapGesture {
      print("Label wurde getippt")
  }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Autor: Sintone Li

Artikeladresse: https://cleanclip.cc/de/developer/swiftui-nswindow-inactive-firstmouse/

Zuletzt aktualisiert: 27.9.2024, 00:58:52