假设我有一个List
,一行中有两个按钮,在没有整行高亮显示的情况下,我如何区分哪个按钮被点击了?
对于此示例代码,当点击行中的任何一个按钮时,将调用两个按钮的操作回调。
// a simple list with just one row
List {
// both buttons in a HStack so that they appear in a single row
HStack {
Button {
print("button 1 tapped")
} label: {
Text("One")
}
Button {
print("button 2 tapped")
} label: {
Text("Two")
}
}
}
当只点击一个按钮时,我看到两个按钮的回调都被调用,这不是我想要的:
button 1 tapped
button 2 tapped
4条答案
按热度按时间ars1skjm1#
您可以应用除**.automatic**之外的任何按钮样式(例如,
.bordered
、.borderless
、.borderedProminent
等)。o2rvlv0m2#
当包含在
List
行中时,似乎是与Button
有关的特定问题。解决方法:
这将产生所需的输出。
您也可以使用
Group
而不是Text
来对“按钮”进行复杂的设计。chy5wohz3#
SwiftUI的一个不同之处是,您不会创建特定的示例,例如UIButton,因为您可能在Mac应用程序中。使用SwiftUI,您请求的是按钮类型的东西。
在这个例子中,由于你是在一个列表行中,系统会给你一个全尺寸的,点击任何地方来触发动作按钮。由于你已经添加了两个按钮,当你点击任何地方时,两个按钮都会被触发。
您可以添加两个单独的视图,并给予它们一个
.onTapGesture
,让它们本质上充当按钮,但您将失去单元格行的点击 Flink 和任何其他自动按钮,如SwiftUI将提供的功能。gcmastyq4#
您需要创建自己的ButtonStyle: