在SwiftUI中显示模态视图

简介

这里教大家如何弹出一个简单的模态视图。分别有两个页面,ContentView和GCPresentedView,以下对应简称为A和B。我们要做的是在A视图中点击按钮跳转到B视图,然后再从B视图点击按钮返回到A视图。

步骤

在A视图中创建按钮和模态视图代码

struct ContentView: View {
@State var isPresented = false var body: some View {
Button(action: {
self.isPresented = true
}, label: {
Text("Present Modally")
})
.sheet(isPresented: $isPresented) {
GCPresentedView()
}
}
}

使用@State对属性进行修饰,在 SwiftUI 内部会自动转换为一对getter,setter,对这个属性进行赋值时会触发视图更新。

$isPresented能够将值引用(引用方法是在值前方加一个$符号),当引用的值发生改变时,这个改变会向外传递。

.sheet方法用于弹出一个模态视图,在SwiftUI中的定义为。

public func sheet<Content>(isPresented: Binding<Bool>, onDismiss: (() -> Void)? = nil, @ViewBuilder content: @escaping () -> Content) -> some View where Content : View

在B视图中创建按钮和关闭模态视图代码

struct GCPresentedView: View {
@Environment(\.presentationMode) var mode var body: some View {
Button(action: {
self.mode.wrappedValue.dismiss()
}, label: {
Text("Dismiss")
})
}
}

@Environment获取环境变量presentationMode,我们可以通过这个变量调用wrappedValue.dismiss()可以关闭模态视图。

直接在 Xcode 运行预览

总结

使用 SwiftUI 框架处理界面方便很多,不用太多的定义,我们只需要将界面进行描述出来就可以了。这个教程示例中使用到了 Button 和 Text 控件,也用到了@State, Binding, @Environment 技术点。教程很简单,放上来大家一起学习,教程里的代码已放在了GitHub上面,点击这里获取代码

声明

博文作者:GarveyCalvin

博文出处:http://www.cnblogs.com/GarveyCalvin/

本文版权归作者和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作!

iOS开发 - 在SwiftUI中显示模态视图的更多相关文章

  1. iOS开发:使用Tab Bar切换视图

    iOS开发:使用Tab Bar切换视图 上一篇文章提到了多视图程序中各个视图之间的切换,用的Tool Bar,说白了还是根据触发事件使用代码改变Root View Controller中的Conten ...

  2. 为何不能在viewDidLoad方法中显示其他视图

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 你可以使得当视图控制器(view controller)显示自 ...

  3. iOS开发之动画中的时间(概况)

    一.引言 在iOS开发中使用动画时,可以通过设置动画的duration.speed.begintime.offset属性,来设置动画的时长.速度.起始时间及起始偏移. 用一个简单的例子来说明各个参数的 ...

  4. (转)iOS 开发,工程中混合使用 ARC 和非ARC

    [前提知识] ARC:Automatic Reference Counting,自动引用计数 在开发 iOS 3 以及之前的版本的项目时我们要自己负责使用引用计数来管理内存,比如要手动 retain. ...

  5. iOS 开发,工程中混合使用 ARC 和非ARC(转)

    [前提知识] ARC:Automatic Reference Counting,自动引用计数 在开发 iOS 3 以及之前的版本的项目时我们要自己负责使用引用计数来管理内存,比如要手动 retain. ...

  6. iOS开发 ~应用程序设计理念:视图控制器(UIViewController)、视图(UIView)

    应用程序设计理念:视图控制器(UIViewController).视图(UIView) 利用视图控制器(底层)管理视图(外观),一对一 1.视图的作用:负责显示的外观 2.视图控制器的作用:创建界面. ...

  7. iOS开发--从TQRichTextViewDemo中学会分析project

    下载地址: http://code4app.com/ios/TQRichTextView/5244fe9c6803fa0862000000 1.首先找到AppDelegate类.不管一个project ...

  8. 把所有界面的状态栏字体颜色设置为白色--iOS开发系列---项目中成长的知识一

    第一步: 在info.plist中 View controller-based status bar appearance这个属性设置为 View controller-based status ba ...

  9. iOS开发:http中的get和post请求

    什么是 HTTP ? 超文本传输协议(HTTP)的设计目的是保证客户端与服务器之间的通信. HTTP 的工作方式是客户端与服务器之间的请求-应答协议. web 浏览器可能是客户端,而计算机上的网络应用 ...

随机推荐

  1. python练习题-9-6

    本代码是<Python核心编程(第二版)>第九章的9-6练习题,完成的功能为:文件比较:比较两个文本文件是否相同,如果不同,给出第一个不同处的行号和列号. #!/usr/bin/env p ...

  2. 大叔 EF 来分析 EntityFrameworks.Data.Core 2

    Extensions 1DbCommand拦截器扩展DbCommandInterceptorExtensions 2Class for IQuerable extensions methods Inc ...

  3. Isx个人第4次作业—Alpha项目测试

    标题 内容 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience 这个作业要求在哪里 https:// ...

  4. [集训]dance

    题意 http://uoj.ac/problem/77 思考 显然能转化为最小割模型.若没有pi的代价,则对于第i个格子,可以让源点连向第i个点,容量为黑色收益,再连向汇点,容量为白色收益.再考虑pi ...

  5. linux--->lnmp环境调试环境配置

    lnmp环境调试环境配置 nginx是一个web服务器,因此nginx的access日志只有对访问页面的记录,不会有php 的 error log信息. nginx把对php的请求发给php-fpm ...

  6. EXCEL的VBA(宏)编程

    EXCEL的VBA编程 杨康需要我完成的需求 第一列是名称 第二列是甲方账户 第三列是甲方金额 第四列是乙方账户 第五列是乙方金额 第六列是true或false 第七列备注 需求 开始时数据对齐的,如 ...

  7. 如何理解 HTMLTestRunner 中 test (result)?UnitTest是如何运行的?

    我们在用Unittest框架时,生成html格式的报告一般都是用HTMLTestRunner.py这个第三方库,大概使用方法如下: with open(config.report_file, 'wb' ...

  8. 高阶函数及 map、reduce、filter 的实现

    博客地址:https://ainyi.com/85 2020 开年国家经历了不少困难,最为凶猛的局势就是新型冠状病毒的蔓延,国务院最终决定春节假期延长至==2 月 2 号==:公司决定 3 - 7 号 ...

  9. 利用http协议使用普通的网站虚拟主机+安信可A6C GPRS模块实现对stm32的远程升级

    步骤: 1.生成bin文件并将bin文件放到虚拟主机目录内 2.做一个php的页面分块读取该bin文件,以asc字符echo出来,并标记好头尾长度和校验. 3.GPRS协议栈连接主机路径,收到内容,将 ...

  10. DRF框架之使用Django框架完成后端接口(API)的定义

    学习DRF框架,首先我们就需要明白为什么要学习这个框架. 接下来我们就先用原生的Django框架来定义一个符合RESTful设计方法的接口(API). RESTful接口的需求如下: GET /boo ...