案例1 :-当我在VStack中有多个按钮时,单击它们中的任何一个时,两个按钮的动作处理程序都会立即执行,只有当VStack是孩子时,才会发生这种情况列表。 对于例如-
List {
VStack {
Button(action: { print("A") }) {
Text("Button A")
}
Button(action: { print("B") }) {
Text("Button B")
}
}
}
在这里,当您单击任何一个按钮(例如按钮B)时,o / p为:- A B
案例2 :-仅使用VStack尝试一下,效果很好。 对于例如-
VStack {
Button(action: { print("C") }) {
Text("Button C")
}
Button(action: { print("D") }) {
Text("Button D")
}
}
在这里,当您单击任意一个按钮(例如按钮D)时,o / p为:- D
我是iOS编程的新手,请帮助我了解我要去哪里哪里还是SwiftUI的问题?
答案 0 :(得分:1)
将按钮样式设置为不同于默认样式的样式,例如BorderlessButtonStyle()
struct Test: View {
var body: some View {
NavigationView {
List {
ForEach([
"Line 1",
"Line 2",
], id: \.self) {
item in
HStack {
Text("\(item)")
Spacer()
Button(action: { print("\(item) 1")}) {
Text("Button 1")
}
Button(action: { print("\(item) 2")}) {
Text("Button 2")
}
}
}
.onDelete { _ in }
.buttonStyle(BorderlessButtonStyle())
}
.navigationBarItems(trailing: EditButton())
}
.accentColor(.red)
}
}
答案 1 :(得分:0)
列表中的按钮将无法正常使用。很可能是错误,但未正式确认。由于未得到确认,因此没有人知道何时/是否将其修复。
在此期间,您可以使用一个自定义按钮,如下所示。它复制了按钮的行为(点击时变色和变暗):
struct ContentView: View {
@State private var flag = false
var body: some View {
List {
VStack {
MyButton(label: "Button A") {
print("A")
}
MyButton(label: "Button B") {
print("B")
}
}
}
}
}
struct MyButton: View {
@State private var tapped = false
let label: String
let action: () -> ()
var body: some View {
let g = DragGesture(minimumDistance: 0, coordinateSpace: .local)
.onChanged({ _ in
withAnimation { self.tapped = true }
})
.onEnded({ _ in
withAnimation { self.tapped = false }
self.action()
})
return Text(label)
.foregroundColor(Color(UIColor.link)
.opacity(tapped ? 0.5 : 1.0))
.gesture(g)
}
}