SwiftUI - две отдельные кнопки действуют как одна
Xcode 11.3 (11C29).
macOS 10.15.2.
В представлении SwiftUI ниже есть две кнопки. Один печатает "ОК", а другой - "Отмена". Однако независимо от того, какая кнопка нажата, выполняются оба оператора печати. Почему так? (Я предполагаю, что это ошибка SwiftUI.)
struct ContentView: View {
var body: some View {
List {
HStack {
Button("OK") {
print("OK.")
}
Button("Cancel") {
print("Cancel")
}
}
}
}
}
(Если либо List
или HStack
закомментирован, то каждая кнопка выводит только свое собственное утверждение.)
1 ответ
Вы можете использовать .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())
}
}
}
Как удобства, то
List
инициализатор также позволяет использовать его, как указано вышеForEach
view, если вы хотите иметь список, состоящий только из одного типа ячеек.
List(["My List Item Buttons"], id: \.self) { item in
Text("Row \(row)")
}
ИЛИ что-то вроде этого без:
struct ContentView: View {
var body: some View {
List {
HStack {
Button(action: { print("OK")}) {
Text("OK")
}
Button(action: { print("Cancel")}) {
Text("Cancel")
}
}
.buttonStyle(BorderlessButtonStyle())
}
}
}