从模态视图使用 NavigationLink 的 SwiftUI 推送视图

Posted

技术标签:

【中文标题】从模态视图使用 NavigationLink 的 SwiftUI 推送视图【英文标题】:SwiftUI Push View with NavigationLink from modal view 【发布时间】:2021-09-28 14:10:20 【问题描述】:

我通过按“展示我的模式”按钮来展示带有fullScreenCover 的模式视图:

struct ContentView: View 

    @State var presentMyModal = false

    var body: some View 
        Text("Hello, world!")
            .fullScreenCover(isPresented: $presentMyModal) 
                    MyModalView()
            
        Button(action:  presentMyModal = true ,
               label:  Text("present my modal"))
    

然后我想用NavigationLink从这个模态推送一个新视图:

struct MyAlertView: View 

    @State var pushNavigationLinkedView = false

    var body: some View 
        Text("MyAlertView")
            .padding()
        Button(action:  pushNavigationLinkedView = true ,
               label:  Text("push navigation linked view"))

        NavigationLink(destination: NavigationLinkedView(),
                       isActive: $pushNavigationLinkedView) 
            EmptyView()
        
    

这是我的NavigationLinkedView

struct NavigationLinkedView: View 
    var body: some View 
        Text("NavigationLinkedView")
            .padding()
    

但是当我按下“推送导航链接视图”按钮时没有任何反应。

那么苹果指南是否允许从模态视图推送带有NavigationLink 的视图?如果是,最好的方法是什么?

ios15 和 XCode 13 上测试

【问题讨论】:

【参考方案1】:

Apple 指南是否允许从模态视图推送带有NavigationLink 的视图?

是的。只要确保在MyAlertView 的基础上有一个NavigationView。模态表创建了一个新的视图层次结构,NavigationLink 仅在上面的层次结构中某处存在NavigationView 时才有效。

【讨论】:

以上是关于从模态视图使用 NavigationLink 的 SwiftUI 推送视图的主要内容,如果未能解决你的问题,请参考以下文章

从目标视图返回时,SwiftUI NavigationLink 显示为突出显示

SwiftUI - 使工具栏的 NavigationLink 使用详细视图

NavigationLink 101:如何将数据从主机发送到辅助视图?

NavigationLink 从其子视图返回视图后不可点击

SwiftUI NavigationView 和 NavigationLink 更改自定义视图的布局

从 NavigationView 呈现工作表会弹出视图