Section内NavigationLink无法同时触发跳转与变量修改问题
问题核心:在List的Section里,NavigationLink的点击区域被单元格的交互逻辑拆分,原代码里的simultaneousGesture仅作用于NavigationLink的文本区域,导致点击文本时只修改变量不跳转,点击空白区域时只跳转不修改变量。
以下是两种无需额外子视图的解决办法:
方法一:用isActive绑定手动控制跳转
通过新增状态变量控制NavigationLink的激活状态,点击单元格任意区域时同时修改变量并触发跳转:
@State private var newValue = -1 @State private var isNavigating = false var body: some View { NavigationView { VStack { Image(systemName: "globe") .imageScale(.large) .foregroundColor(.accentColor) Text("\(newValue)") List { Section("Navigationlink") { NavigationLink(destination: EmptyView(), isActive: $isNavigating) { Text("to Emptyview") } .onTapGesture { newValue = 100 isNavigating = true } } } } } }
方法二:用selection+tag绑定跳转目标
通过标记选择状态来控制NavigationLink的激活,同样能实现点击单元格任意区域时同时完成变量修改和跳转:
@State private var newValue = -1 @State private var selectedDestination: String? = nil var body: some View { NavigationView { VStack { Image(systemName: "globe") .imageScale(.large) .foregroundColor(.accentColor) Text("\(newValue)") List { Section("Navigationlink") { NavigationLink(destination: EmptyView(), tag: "empty", selection: $selectedDestination) { Text("to Emptyview") } .onTapGesture { newValue = 100 selectedDestination = "empty" } } } } } }
这两种方法都绕开了原代码中手势触发范围不一致的问题,确保点击单元格的任意区域都能同时执行修改变量和跳转操作。
内容的提问来源于stack exchange,提问作者I-O-ES
相关产品推荐
相关产品推荐

