SwiftUI Mac:添加 buttonStyle 使按钮单击传播到父级

SwiftUI Mac: Adding buttonStyle Makes Button Click Propagate to Parent

我正在尝试在 SwiftUI Mac 应用程序 中创建一个情境,当我在父视图中单击 Button 时,只有 Button 的动作是触发器——不是任何附加到其父级的点击手势。

这是一个重现问题的简单示例:

import SwiftUI

struct ContentView: View {
  var body: some View {
    VStack(spacing: 30){
      Button("Button"){
        print("button clicked")
      }
      .padding(5)
      .background(Color.blue)
      .buttonStyle(PlainButtonStyle())
    }
    .frame(width: 500, height: 500)
    .background(Color.gray)
    .padding(100)

    .gesture(TapGesture(count: 2).onEnded {
      //Double click (open message in popup)
      print("double click")
    })
    .simultaneousGesture(TapGesture().onEnded {
      if NSEvent.modifierFlags.contains(.command){
        print("command click")
      }else{
        print("single click")
      }
    })
  }
}

单击按钮会同时触发 button clickedsingle click

如果您注释掉 buttonStyle...

//.buttonStyle(PlainButtonStyle())

它按我想要的方式工作。仅 button clicked 被解雇。

无论我使用哪种按钮样式似乎都没有关系,该行为仍然存在。在我的情况下,我确实需要子按钮上的自定义按钮样式,那么我该如何解决这个问题?

如果您将 .simultaneousGesture 替换为常规 .gesture 它对我有用 – 并且仍然可以识别外部的单击和双击。