如果单击,NSViewRepresentable 中的 NSButton 不会给出 "visual feedback"

NSButton inside a NSViewRepresentable gives no "visual feedback" if clicked

我基于带有 NSViewRepresentable 的 NSButton 构建了一个 NativeButton 来检测右击。
它工作正常,但如果单击它,我不会像普通按钮那样获得“视觉反馈”。
如果单击按钮(与任何普通按钮一样),我怎样才能使按钮变暗?

struct TEST_NativeButton: View {
  var body: some View {
    VStack{
      Text("Test Native Button")
      NativeButton(
        rightClickAction: {print("rightclick")},
        leftClickAction: {print("leftclick")}
      )
      { print("standard action")
      }
    }.frame(width: 200, height: 200)
  }
}

struct NativeButton: NSViewRepresentable {
  typealias NSViewType = NativeNSButton

  let rightClickAction: ActionFunction
  let leftClickAction: ActionFunction
  let standardAction: ActionFunction

  init(
        rightClickAction : ActionFunction?  = nil,
        leftClickAction :  ActionFunction?  = nil,
        standardAction:    @escaping ActionFunction
  )
  {
    if let rightClickAction = rightClickAction{
      self.rightClickAction = rightClickAction
    } else {
      self.rightClickAction = {}
    }

    if let  leftClickAction = leftClickAction{
      self.leftClickAction = leftClickAction
    } else {
      self.leftClickAction = standardAction
    }

    self.standardAction = standardAction

  }

  func makeNSView(context: Context) -> NativeNSButton {
    NativeNSButton(
                  rightClickAction: rightClickAction,
                  leftClickAction: leftClickAction,
                  standardAction: standardAction)
  }

  func updateNSView(_ nsView: NativeNSButton, context: Context) {
    //ToDo auf änderungen am Titel reagieren
    return
  }
}

class NativeNSButton: NSButton {
  let standardAction: () -> Void
  let rightClickAction: () -> Void
  let leftClickAction: () -> Void

  init(
        rightClickAction : @escaping () -> Void,
        leftClickAction :  @escaping () -> Void,
        standardAction:    @escaping () -> Void) {

    self.standardAction = standardAction
    self.rightClickAction = rightClickAction
    self.leftClickAction = leftClickAction

    super.init(frame: .zero)

    self.title = title
    self.alignment = alignment
    self.target = self
    self.action = #selector(clickButton(_:))

    bezelStyle = .rounded
    isBordered = true
    focusRingType = .none

    self.translatesAutoresizingMaskIntoConstraints = false
    self.setContentHuggingPriority(.defaultHigh, for: .vertical)
    self.setContentHuggingPriority(.defaultHigh, for: .horizontal)
  }

  required init?(coder: NSCoder) {
    fatalError()
  }

  override func mouseDown(with theEvent: NSEvent) {
    //print("left mouse")
    leftClickAction()
  }

  override func rightMouseDown(with theEvent: NSEvent) {
    //print("right mouse")
    rightClickAction()
  }

  @objc func clickButton(_ sender: BbcNSButton) {
    //print("standard action")
    standardAction()
  }
}

标准操作用于检测键盘快捷键(在此示例中已删除)。

调用超级方法

override func mouseDown(with theEvent: NSEvent) {
    super.mouseDown(with: theEvent)
    //print("left mouse")
    leftClickAction()
  }