Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 以编程方式推送NavigationLink时,如何重置选择标记?_Ios_Swiftui - Fatal编程技术网

Ios 以编程方式推送NavigationLink时,如何重置选择标记?

Ios 以编程方式推送NavigationLink时,如何重置选择标记?,ios,swiftui,Ios,Swiftui,我希望以编程方式推送视图,而不是依赖NavigationLink提供的接口(例如,我希望)。方法是使用带有标记和选择的NavigationLink,以及一个EmptyView 当我尝试使用以下代码推送视图时,第一次推送视图是有效的: struct PushExample: View { @State private var pushedView: Int? = nil var body: some View { NavigationView { VStack {

我希望以编程方式推送视图,而不是依赖NavigationLink提供的接口(例如,我希望)。方法是使用带有标记和选择的NavigationLink,以及一个EmptyView

当我尝试使用以下代码推送视图时,第一次推送视图是有效的:

struct PushExample: View {
  @State private var pushedView: Int? = nil

  var body: some View {
    NavigationView {
      VStack {
        Form {
          Button(action: { self.pushedView = 1 }) { Text("Push view") }
        }

        NavigationLink(destination: Text("Detail view"), tag: 1, selection: $pushedView) { EmptyView() }
      }
    }
  }
}
但是,如果我点击视图上的“后退”按钮,然后再次尝试点击该按钮,它将不再推动视图。这是因为值
pushedView
再次被设置为
1
,但它已经位于
1
。弹出
详细视图时,不会将其重置为
nil


如何获得随后的点击按钮以再次按下视图?

TL;DR:无需重置状态变量,因为SwiftUI将自动为您处理它。如果不是,可能是模拟器的错误


这是Xcode 11.3上的一个模拟器错误

检查是否是模拟器错误的方法是运行更简单的示例:

struct ContentView: View {
  var body: some View {
    NavigationView {
      NavigationLink("Push", destination: Text("Detail"))
    }
  }
}
在Xcode 11.3 iPhone 11 Pro Max上,这只在您第一次点击链接时起作用

这在13.2和13.3设备上都运行良好

因此,当遇到奇怪的SwiftUI问题时,应在设备上而不是模拟器上进行测试



更新:重新启动计算机也无法修复。因此,尽管SwiftUI仍然是新的,但最好使用真实的设备进行测试,而不是使用模拟器。

按预期工作(在点击
pushedView==nil
后)。使用Xcode 11.2/iOS 13.2进行测试。您是否使用Xcode 11.3?这是否回答了您的问题?太神了这确实是一个模拟器错误(Xcode 11.3.1仍在运行),在设备上运行良好。我有一个具有多个可选行的
列表
:选择一行将推送UIKit桥接视图,然后返回并点击同一行没有任何效果–点击后退按钮时不会释放被推送的视图。返回并选择表中的另一行确实会推送新行,但会立即弹出(因为这是在释放先前推送的视图时)。很高兴它只是在模拟器上,已经在尝试各种解决方法了。