• SwiftUI(二)- 页面导航NavigationLink和Sheet窗口(模态视图)


    官方文档对NavigationLink的定义:
    A button that triggers a navigation presentation when pressed.

    SwiftUI中的页面跳转都是由NavigationLink来进行管理的

    1、简单跳转
    import SwiftUI
    
    struct ContentView: View {
        let detail = Detail()
        var body: some View {
            VStack {
                NavigationLink(destination: Detail()) {
                    Text("跳转")
                }
            }
        }
    }
    
    struct Detail: View {
        var body: some View {
            Text("详情页")
        }
    }
    
    2、使用isActive进行自动跳转子页面

    在某些场景中跳转子页面需要在代码中控制,NavigationLink提供了isActive属性,来实现这一自动跳转功能

    struct ContentView: View {
        @State var isActive = false
        let detail = Detail()
        var body: some View {
            VStack {
                NavigationLink(destination: Detail(), isActive: $isActive) {
                    Text("跳转")
                }
                Spacer().frame( 1, height: 20, alignment: .center)
                Button("自动跳转") {
                    //每次打印isActive都是false,说明这是一个状态位标识
                    print(self.isActive)
                    self.isActive = true
                }
            }
        }
    }
    
    3、使用sheet方法弹出模态窗口(Modal)

    在SwiftUI中不存在UIKit中的Modal跳转,取而代之的是称之为Sheet的窗口,方法继承自View基础视图,既SwiftUI中任一视图都可以弹出Sheet窗口

    struct ContentView: View {
        @State var isActive = false
        @State var isModal = false
        let detail = Detail()
        var body: some View {
            VStack {
                NavigationLink(destination: Detail(), isActive: $isActive) {
                    Text("跳转")
                }
                
                Spacer().frame( 1, height: 20, alignment: .center)
                
                Button("自动跳转") {
                    //每次打印isActive都是false,说明这是一个状态位标识
                    print(self.isActive)
                    self.isActive = true
                }
                
                Spacer().frame( 1, height: 20, alignment: .center)
                
                Button("Modal跳转示例") {
                    //每次打印isModal都是false,说明这是一个状态位标识
                    print(self.isModal)
                    self.isModal = true
                }.sheet(isPresented: $isModal, onDismiss: {
                    print("Detail View Dismissed")
                }) {
                    Detail()
                }
            }
        }
    }
    
    4、使用PopOver方法弹出模态窗口(Modal)

    使用方法与Sheet类似:

    Button("PopOverModal跳转示例") {
        //每次打印isPopOver都是false,说明这是一个状态位标识
        print(self.isPopOver)
        self.isPopOver = true
    }.popover(isPresented: $isPopOver, content: {
        Detail()
    })
    
    5、使用环境变量presentationMode实现手动返回父页面

    通过NavigationLink跳转到子级页面的视图可以通过回退按钮返回父视图,Sheet窗口可以通过下滑实现返回父视图

    除此以外还可通过环境变量presentationMode来手动返回父页面,对于NavigationLink和Sheet都适用

    struct Detail: View {
        @Environment(.presentationMode) var mode
        
        var body: some View {
            
            Button(action: {
                self.mode.wrappedValue.dismiss()
            }, label: {
                Text("退出详情页")
            })
            
        }
    }
    
  • 相关阅读:
    css文字换行问题white-space:pre-line或者white-space:pre-wrap,解决word-wrap:break-word解决不了的
    ie浏览器检测不到cookie的问题
    jQuery ajax在IE浏览器的跨域问题--jquery.xdomainrequest.min.js
    移动端 input 获取焦点后弹出带搜索、确定、前往的键盘,以及隐藏系统键盘
    三个获取浏览器URL中参数值的方法
    上传文件时文件类型限制 <input id="File1" type="file" accept=""/>
    ES6 let和const 的相同点与区别
    html页面中的title设置为空格
    vue 之 key
    nginx 之 proxy_pass详解
  • 原文地址:https://www.cnblogs.com/anywherego/p/12750090.html
Copyright © 2020-2023  润新知