包含按钮的 SwiftUI 导航链接

Posted

技术标签:

【中文标题】包含按钮的 SwiftUI 导航链接【英文标题】:SwiftUI Navigation Link containing a Button 【发布时间】:2020-08-08 12:12:27 【问题描述】:

我有一个如下所示的 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))
        
    

【讨论】:

以上是关于包含按钮的 SwiftUI 导航链接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 的按钮中添加导航按钮链接?

SwiftUI:如何更改用户按住导航链接或按钮等内容时发生的颜色变化?

导航链接在 SwiftUI 中只能使用一次

SwiftUI 和双导航栏

使用表单 SwiftUI 的导航链接

在不使用导航链接的情况下获取 SwiftUI 列表中的选定项目