包含按钮的SwiftUI导航链接

包含按钮的SwiftUI导航链接,swift,swiftui,swiftui-list,swiftui-navigationlink,swiftui-button,Swift,Swiftui,Swiftui List,Swiftui Navigationlink,Swiftui Button,我有一个快捷界面列表,如下所示: List { ForEach(items) { item in NavigationLink(destination: EditItemView(item: item)) { ItemView(item: item, buttonAction: { // Do something }) } } 其中ItemView为: struct ItemView: View { var

我有一个快捷界面列表,如下所示:

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
,而不是执行按钮操作,这是导航链接操作

那么,如何让按钮在导航链接中执行操作呢


或者,如果这是不可能的,我如何才能使点击项目视图执行一个操作,点击按钮执行另一个操作?

这里有一种可能的方法-通过将默认按钮替换为点击手势(使用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))
        }
    }
}