我想以编程方式推送视图,而不是依赖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
。
如何获得随后的按钮点击以再次推动视图?
答案 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仍然很新,但最好使用真实的设备而不是模拟器来进行测试。