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

时间:2019-12-13 20:00:33

标签: ios swiftui

我想以编程方式推送视图,而不是依赖NavigationLink提供的界面(例如,我想use a button with no chevron)。 correct way用于将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时,什么也没有将其重置为Detail view

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

1 个答案:

答案 0 :(得分:0)

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仍然很新,但最好使用真实的设备而不是模拟器来进行测试。