Ios 以编程方式推送NavigationLink时,如何重置选择标记?
我希望以编程方式推送视图,而不是依赖NavigationLink提供的接口(例如,我希望)。方法是使用带有标记和选择的NavigationLink,以及一个EmptyView 当我尝试使用以下代码推送视图时,第一次推送视图是有效的:Ios 以编程方式推送NavigationLink时,如何重置选择标记?,ios,swiftui,Ios,Swiftui,我希望以编程方式推送视图,而不是依赖NavigationLink提供的接口(例如,我希望)。方法是使用带有标记和选择的NavigationLink,以及一个EmptyView 当我尝试使用以下代码推送视图时,第一次推送视图是有效的: struct PushExample: View { @State private var pushedView: Int? = nil var body: some View { NavigationView { VStack {
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桥接视图,然后返回并点击同一行没有任何效果–点击后退按钮时不会释放被推送的视图。返回并选择表中的另一行确实会推送新行,但会立即弹出(因为这是在释放先前推送的视图时)。很高兴它只是在模拟器上,已经在尝试各种解决方法了。