Vin*_*van 6 list button swiftui hstack
Xcode 11.3 (11C29).
macOS 10.15.2.
Run Code Online (Sandbox Code Playgroud)
下面的 SwiftUI 视图中有两个按钮。一个打印“确定”,另一个打印“取消”。但是,无论按下哪个按钮,都会执行两个打印语句。 这是为什么?(我认为这一定是 SwiftUI 的 bug。)
struct ContentView: View {
var body: some View {
List {
HStack {
Button("OK") {
print("OK.")
}
Button("Cancel") {
print("Cancel")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
(如果 theList或 theHStack被注释掉,则每个按钮仅打印其自己的语句。)
您可以使用它.buttonStyle(BorderlessButtonStyle())来达到所需的结果。如果您想在 中包含按钮List,它允许您单独点击以及点击行List。
这是一个带有ForEach(..)循环的实现:
struct ContentView: View {
var body: some View {
List {
ForEach(["My List Item Buttons"], id: \.self) {
item in
HStack {
Text("\(item)")
Spacer()
Button(action: { print("\(item) 1")}) {
Text("OK")
}
Button(action: { print("\(item) 2")}) {
Text("Cancel")
}
}
}
.buttonStyle(BorderlessButtonStyle())
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了方便起见,如果您想要一个仅包含单个单元格类型的列表,
List初始化程序还允许您像上面的视图一样使用它。ForEach
List(["My List Item Buttons"], id: \.self) { item in
Text("Row \(row)")
}
Run Code Online (Sandbox Code Playgroud)
或者类似的东西没有:
struct ContentView: View {
var body: some View {
List {
HStack {
Button(action: { print("OK")}) {
Text("OK")
}
Button(action: { print("Cancel")}) {
Text("Cancel")
}
}
.buttonStyle(BorderlessButtonStyle())
}
}
}
Run Code Online (Sandbox Code Playgroud)