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 clicked
和 single click
。
如果您注释掉 buttonStyle
...
//.buttonStyle(PlainButtonStyle())
它按我想要的方式工作。仅 button clicked
被解雇。
无论我使用哪种按钮样式似乎都没有关系,该行为仍然存在。在我的情况下,我确实需要子按钮上的自定义按钮样式,那么我该如何解决这个问题?
如果您将 .simultaneousGesture
替换为常规 .gesture
它对我有用 – 并且仍然可以识别外部的单击和双击。
我正在尝试在 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 clicked
和 single click
。
如果您注释掉 buttonStyle
...
//.buttonStyle(PlainButtonStyle())
它按我想要的方式工作。仅 button clicked
被解雇。
无论我使用哪种按钮样式似乎都没有关系,该行为仍然存在。在我的情况下,我确实需要子按钮上的自定义按钮样式,那么我该如何解决这个问题?
如果您将 .simultaneousGesture
替换为常规 .gesture
它对我有用 – 并且仍然可以识别外部的单击和双击。