包含按钮的SwiftUI导航链接

时间:2020-08-08 12:12:27

标签: swift swiftui swiftui-list swiftui-navigationlink swiftui-button

我有一个看起来像这样的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 个答案:

答案 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))
        }
    }
}