首页 > 解决方案 > SwiftUI:NavigationLink 无意中点击并在表单内激活

问题描述

我似乎在将 aNavigationLink重新格式化为Form. MyNavigationLink是通过isActive按下切换按钮来激活的showNext

问题是,NavigationLink即使按钮不存在,似乎也可以自行激活,方法是点击Form似乎NavigationLinkEmptyView. 似乎Form甚至为EmptyViews.

所以我在想可能有一些可能的解决方案,但我不确定这些是否可能:

(1) 在不禁用导航行为的情况下,以某种方式完全隐藏为NavigationLink/创建的行。EmptyView

(2) 覆盖的Form格式NavigationLink,使其在点击时不会被激活。

编辑:似乎选项 2 是可能的,.disabled(true)但空白部分仍然可见,这在这似乎有点 hacky 之上是不可取的。

struct FormView  : View {
    @State var showNext: Bool = false

    var body: some View {
        NavigationView {
            Form {
               Section {
                   VStack {
                       Text("Hello")

                       NavigationLink(destination: Text("Detail View"), isActive: $showNext) 
                       { EmptyView() }
                   }
               }
            }
        }
    }
}

标签: swiftformsswiftuinavigationlink

解决方案


解决方案是将链接隐藏到某些视图的背景中,如下所示

Form {
 Section {
   VStack {
      Text("Hello")
        .background(
           NavigationLink(destination: Text("Detail View"), isActive: $showNext)
             { EmptyView() }.disabled(!showNext)
         )
     }
   }
}

推荐阅读