NavigationLink

官方文档对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(width: 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(width: 1, height: 20, alignment: .center) Button("自动跳转") {
//每次打印isActive都是false,说明这是一个状态位标识
print(self.isActive)
self.isActive = true
} Spacer().frame(width: 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("退出详情页")
}) }
}

SwiftUI(二)- 页面导航NavigationLink和Sheet窗口(模态视图)的更多相关文章

  1. 【Win10】页面导航的实现

    注:本文基于 Windows 10 10240 及其 SDK 编写,若以后有变化,请以新版本为准. 页面导航我们是再熟悉不过了,浏览器.手机 App 大多都使用这种方式来展示内容.在 Windows ...

  2. Windows Phone 8.1 新特性 - 页面导航

    本篇介绍一下Windows Phone 8.1 中页面导航的实现方式. 大家对Windows Phone 8 中页面导航的实现一定不陌生,我们使用 NavigationService 来实现.具体写法 ...

  3. wp8.1 Study1: 页面导航&页面间值传递

    摘要:wp8.1与wp8中很多API是不一样了,wp8.1把以前wp7.x时的api去掉了,更多与win8.1的API相似.比如以下的页面导航和页面之间的值传递 1.页面导航 利用Frame.Navi ...

  4. 与众不同 windows phone (27) - Feature(特性)之搜索的可扩展性, 程序的生命周期和页面的生命周期, 页面导航, 系统状态栏

    原文:与众不同 windows phone (27) - Feature(特性)之搜索的可扩展性, 程序的生命周期和页面的生命周期, 页面导航, 系统状态栏 [索引页][源码下载] 与众不同 wind ...

  5. 2017春 前端自动化(二) 页面自动刷新、sass与css转换的使用、pxToRem直观转换

    2017春 前端自动化(二)   页面自动刷新.sass与css转换的使用.pxToRem直观转换 引言:   此文要演示:浏览器页面自动刷新:移动端px与rem的转换,简单直观化:使用sass自动生 ...

  6. ASP.NET四种页面导航方式之比较与选择

    一.超级链接 从一个表单进入另一个表单最简单的方式是使用HTML超级链接控件.在Web表单中,使用超级链接的HTML代码类如: <a href="WebForm2.aspx" ...

  7. windows phone8.1:页面导航详解

    小梦给大家带来windows phone 8.1应用开发实战教程,分享自己学习,开发过程中的经验和技巧. 今天给大家分享windows phone 8.1页面导航相关知识.涉及知识点如下: 页面一导航 ...

  8. Jsp学习笔记(2)——页面导航、表单、EL表达式

    页面导航 有两种跳转页面的方法.重定向和请求转发 两者区别: 请求转发(forward) 重定向(rerect) 请求服务次数 1 2 是否保留第一次请求request范围的属性 保留 不保留 地址栏 ...

  9. Jetpack Compose学习(11)——Navigation页面导航的使用

    原文:Jetpack Compose学习(11)--Navigation页面导航的使用 - Stars-One的杂货小窝 在Android原生的View开发中的,也是有Navigation,原生我之后 ...

  10. wp8.1 页面返回 页面导航

    public The_second() public second() { this.InitializeComponent(); Frame frame = Window.Current.Conte ...

随机推荐

  1. Linux&Ubuntu之更换服务器

    前言 更换网卡.主板上的板载网卡.主板是服务器硬件维护的常规操作.通常新换(板载)网卡的MAC地址会变更,而部分服务器更换主板也会导致板载网卡MAC地址变化.由于CAS(Ubuntu)系统会将新MAC ...

  2. c# webapi swagger

    如何配置swagger? 在使用项目中,我们希望去查看我们的webapi的测试,那么我们是需要去有一个集成的测试的. 步骤 1.在nutget管理包中下载swagger包. 2.这样会在App_sta ...

  3. 剑指offer05(Java)-替换空格(简单)

    题目: 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are happy."输出:"We%20are ...

  4. 力扣349(java&python)-两个数组的交集(简单)

    题目: 给定两个数组 nums1 和 nums2 ,返回 它们的交集 .输出结果中的每个元素一定是 唯一 的.我们可以 不考虑输出结果的顺序 . 示例 1: 输入:nums1 = [1,2,2,1], ...

  5. 力扣237(java&python)-删除链表中的节点(中等)

    题目: 有一个单链表的 head,我们想删除它其中的一个节点 node. 给你一个需要删除的节点 node .你将 无法访问 第一个节点  head. 链表的所有值都是 唯一的,并且保证给定的节点 n ...

  6. static_cast与dynamic_cast到底是什么?

    写这个随笔说一下C++的static_cast和dynamic_cast用在子类与父类的指针转换时的一些事宜.首先,[static_cast,dynamic_cast][父类指针,子类指针],两两一组 ...

  7. 一文读懂 BizDevOps:数字化转型下的技术破局

    简介: 目标.方法与实践. 我们正迈向数字经济时代,数字化转型成为普遍行动.未来绝大多数业务都将运行在数字基座之上,软件系统成为业务创新和发展的核心引擎.在这一趋势下,产品研发的交付能力面临巨大挑战, ...

  8. CDN应用进阶 | 正确使用CDN 让你更好规避安全风险

    为了帮助用户更好地了解和使用CDN产品,CDN应用实践进阶系统课程开课了.12月17日,阿里云CDN产品专家彭飞在线分享了<正确使用CDN,让你更好规避安全风险>议题,内容主要包括以下几个 ...

  9. 喜马拉雅 Apache RocketMQ 消息治理实践

    ​简介:本文通过喜马拉雅的RocketMQ治理实践分享,让大家了解使用消息中间件过程中可能遇到的问题,避免实战中踩坑. 作者:曹融,来自喜马拉雅,从事微服务和消息相关中间件开发. ​ 本文通过喜马拉雅 ...

  10. VSCode和PhpStorm配置进行PHP断点调试

    本文环境:php版本:5.4.45 (phpstudy),Xdebug 2.4.1(phpstudy文件夹中自带),phpstorm 2021.3 目录 PHP配置 关于Xdebug 浏览器配置(插件 ...