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. k8s之Pod

    什么是Pod 通俗的来讲就是以pause为基础容器,其它容器共享pause容器的网络名称空间.主机名以及进程间通信,组成的一个逻辑的容器集合. • Kubernetes Pod是Kubernetes的 ...

  2. 重新点亮linux 命令树————压缩和解压缩[四]

    前言 简单整理一下压缩和解压缩. 正文 在windows 中我们使用压缩和解压缩一般是7z这个压缩和解压软件,但是在linux中压缩和解压是两个不同的软件. 在最早的linux 备份介质是磁带,使用的 ...

  3. 百度AIPNLP 文本相似度 文本审核

    效果不如有监督的bert文本相似度好 from aip import AipNlp APP_ID = "22216281" APT_KEY = "foEeYauuvnqW ...

  4. 第十課-Change Mirth Connect To Mariadb

    随着接口部署数量和交互数据越来越多,原来基于Mirth Connect默认derby嵌入式数据库下运行越来越不能满足高性能.高可靠等线上刚性需求:故需要切换Mirth Connect的运行后台数据库. ...

  5. 力扣627(MySQL)-变更性别(简单)

    题目: Salary 表: 请你编写一个 SQL 查询来交换所有的 'f' 和 'm' (即,将所有 'f' 变为 'm' ,反之亦然),仅使用 单个 update 语句 ,且不产生中间临时表. 注意 ...

  6. 力扣67(java)-二进制求和(简单)

    题目: 给你两个二进制字符串,返回它们的和(用二进制表示). 输入为 非空 字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1&quo ...

  7. 探秘RocketMQ源码——Series1:Producer视角看事务消息

    简介: 探秘RocketMQ源码--Series1:Producer视角看事务消息 1. 前言 Apache RocketMQ作为广为人知的开源消息中间件,诞生于阿里巴巴,于2016年捐赠给了Apac ...

  8. 双11特刊|购物车实时显示到手价,看云原生内存数据库Tair如何提升用户体验?

    ​阿里云自研内存数据库Tair诞生于2009年,是一种支持高并发低延迟访问的云原生内存数据库,完全兼容Redis,已历经多年双11大促考验,提供核心在线访问加速能力,显著提升系统吞吐量. 作为双11大 ...

  9. [Trading] 专业交易: 专业交易员和散户交易员的不同, 什么是专业交易员

    专业交易员可能用的是公司的钱或者自己的钱 有基本工资支持,散户用的是自己的钱 没有人提供工资来做交易. 目标不同,专业交易员的目的是增长投资账户和获得奖金,散户大部分是为了提取盈利收入而无法增长投资账 ...

  10. WPF 使用 Silk 的 Direct2D 入门

    在上一篇博客的基础上,使用 dotnet 基金会新开源的 Silk.NET 库,让 Silk.NET 创建的 DX 设备和 WPF 对接渲染.接下来本文将告诉大家如何使用 Silk.NET 提供的 D ...