我有一个看起来像这样的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
而不是执行按钮操作。
那么,如何在导航链接中使用按钮执行操作?
或者如果这不可能,那么如何使点击项目视图执行一项操作,然后点击按钮执行另一项操作?
答案 0 :(得分:1)
这是可行的方法-通过用点击手势替换默认按钮(已通过Xcode 12 / iOS 14测试),仅更改了ItemView
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))
}
}
}