Swiftui 退出时返回两级的导航链接

Swiftui 退出时返回两级的导航链接,swiftui,ios14,Swiftui,Ios14,从选项卡式视图中的导航视图返回时遇到问题。我的项目有一个设置选项卡,用户可以通过导航链接“查看条目”进行选择。从那里还有另一个导航链接“添加新条目”。从“添加新条目”返回将使您可以查看条目,但实际上是将另一个级别返回到“设置”菜单 我在控制台上看到一条警告:“试图弹出到/Library/Caches/com.apple上丢失的目标…”。使用tabbed view示例代码时,我不再得到“pop to missing destination”警告,但在导航返回方面仍然存在相同的问题 下面的示例代码已

从选项卡式视图中的导航视图返回时遇到问题。我的项目有一个设置选项卡,用户可以通过导航链接“查看条目”进行选择。从那里还有另一个导航链接“添加新条目”。从“添加新条目”返回将使您可以查看条目,但实际上是将另一个级别返回到“设置”菜单

我在控制台上看到一条警告:“试图弹出到/Library/Caches/com.apple上丢失的目标…”。使用tabbed view示例代码时,我不再得到“pop to missing destination”警告,但在导航返回方面仍然存在相同的问题

下面的示例代码已准备好在Xcode 12中运行和测试

在下面的示例代码中,点击设置并选择导航视图“查看条目”。这将是一个在列表中显示条目的屏幕。点击加号按钮可以添加新条目。“添加新条目”屏幕上的文本字段不起任何作用。单击“保存”或“返回”按钮将返回“查看条目”屏幕,但会返回设置菜单。“保存”按钮使用presentationMode.wrappedValue.Disclose关闭视图

事实上,两个不同版本的选项卡视图逻辑对我的导航视图返回逻辑没有任何影响,这让我相信我的导航视图逻辑中有一些普通的老错误,但我确实没有看到。下面的示例代码使用标准选项卡视图逻辑

struct ContentView: View {
    
    @State private var selection = 0
    
    var body: some View {
        
        NavigationView {
            TabView (selection: $selection) {
                
                HomeView()
                    .tabItem {
                        Label("Home", systemImage: "house")
                    }.tag(1)
                
                AView()
                    .tabItem {
                        Label("A", systemImage: "a.circle")
                    }.tag(2)
                
                
                BView()
                    .tabItem {
                        Label("B", systemImage: "b.circle")
                    }.tag(3)
                
                
                SettingsView()
                    .tabItem {
                        Label("Settings", systemImage: "gearshape")
                    }.tag(4)
            }
        }
    }
}


struct HomeView: View {
    
    var body: some View {
        
        Text("Home Screen")
    }
}


struct AView: View {
    
    var body: some View {
        
        Text("A Screen")
    }
}


struct BView: View {
    
    var body: some View {
        
        Text("B Screen")
    }
}


struct SettingsView: View {
    
    var body: some View {
        
        VStack (alignment: .leading) {
            List {
            Text("Settings")
                .font(.title)
                .fontWeight(.bold)
                .padding(.leading, 15)
            
                NavigationLink(destination: SetAView()) {Text("View Entries")}
            }
        }
        .font(.body)
    }
}


struct SetAView: View {
    
    var body: some View {
        
        List {
            Text("View Entries")
                .padding(.vertical, 10)
            Text("Normally entires would be displayed here")
            Text("Should return here upon adding new entry")
                .padding(.vertical, 10)
            Text("Click the + button to add new entry")
            
        }
        .navigationBarItems(trailing: NavigationLink (destination: AddTestView()) {
            Image(systemName: "plus")
                .resizable()
                .foregroundColor(Color(.systemBlue))
                .frame(width: 18, height: 18)
        } // body
        )
    }
}


struct AddTestView: View {
    
    @Environment(\.presentationMode) var presentationMode
    @State private var catSelect: String = ""
    
    var body: some View {
        NavigationView {
            VStack {
                Form {
                    
                    Section {
                        TextField("Enter Entry Name", text: $catSelect)
                            .padding(.horizontal, 20)
                            .keyboardType(.default)
                    }
                }
            }
            
            .navigationBarTitle(Text("Add new Entry"), displayMode: .inline)
            .navigationViewStyle(StackNavigationViewStyle())
            .navigationBarItems(trailing: Button(action: {
                self.presentationMode.wrappedValue.dismiss()
            }) {
                Text ("Save")
                
            })
        }
    }
}

经过大量分析后,我发现我的实际代码中有两个NavigationView副本——TabView代码没有任何问题。删除不在contentView中的一个NavigationView会导致多个函数无法工作,因此会从头开始重新构建它们。现在,使用TabView和NaigationView(包括后退按钮)进行所有操作。

我将整个选项卡视图更改为导航视图,以查看选项卡视图是否导致导航链接出现问题。当我进入设置->查看条目->+(添加新条目),然后单击后退按钮时,系统将正确返回到查看条目。但是,当进入“添加新条目”并单击“保存”时,系统将跳过“查看条目”屏幕并返回到“设置”菜单。