Навигационная ссылка SwiftUI, содержащая кнопку
У меня есть список SwiftUI, который выглядит так:
List {
ForEach(items) { item in
NavigationLink(destination: EditItemView(item: item)) {
ItemView(item: item, buttonAction: {
// Do something
})
}
}
где ItemView
является:
struct ItemView: View {
var item: Item
let buttonAction: () -> Void
var body: some View {
HStack(alignment: .center) {
Text(item.tile)
.font(.headline)
Spacer()
Button(action: buttonAction,
label: {
Image(systemName: "plus.circle")
})
.padding(.horizontal)
}
}
}
Однако всякий раз, когда я нажимаю на кнопку, вместо выполнения действия кнопки она переходит к EditItemView
что является действием ссылки навигации.
Итак, как я могу заставить кнопку выполнять действие внутри навигационной ссылки?
Или, если это невозможно, как я могу сделать так, чтобы нажатие на представление элемента выполняло одно действие, а нажатие кнопки выполняло другое действие?
1 ответ
Решение
Здесь возможен подход - только изменено ItemView
путем замены кнопки по умолчанию жестом касания (проверено с Xcode 12 / iOS 14)
struct ItemView: View {
var item: Int
let buttonAction: () -> Void
var body: some View {
HStack(alignment: .center) {
Text("Item \(item)")
.font(.headline)
Spacer()
Image(systemName: "plus.circle")
.padding(.horizontal).contentShape(Rectangle())
.highPriorityGesture(TapGesture().onEnded(buttonAction))
}
}
}