alert 标题_[SwiftUI 知识碎片] Button、Image 和 Alert

5e32a0879ca19e2f3597b8b92c4edadc.png
译自 Buttons and images
更多内容,欢迎关注公众号:Swift花园
喜欢文章?不如来个 ➕三连?关注专栏,关注我

Button 和 Image

在 SwiftUI 中,按钮可以由两种方式创建,取决于它们的外观。

最简单的方式是创建一个只包含文本的按钮:你传入按钮的标题,并且提供一个闭包,这个闭包会在按钮被点击时执行:

Button("Tap me!") {print("Button was tapped")
}

如果你想要更多,比如一个图像或者视图的组合,你可以使用另外一种形式:

Button(action: {print("Button was tapped")
}) { Text("Tap me!")
}

当你需要在按钮中配合图像,那么上面这种方式尤其适用。

SwiftUI 有一个专门的 Image 类型,用于处于 app 中的图片,并且有三种主要的创建方式:

  • Image("pencil") 会加载一个叫 “pencil” 的图片,它是你已经加入工程的图片。
  • Image(decorative: "pencil") 会加载相同的图片,但不会在你启用屏幕阅读的时候被读出来。这种方式在图像没有传递额外重要信息的时候很有用。
  • Image(systemName: "pencil") 会加载 iOS 内建的 pencil 图标。它用的是 Apple 的 SF Symbols 图标集,你可以从 Apple 的网站下载这个全集,在全集中浏览和搜索图标。

默认情况下,如果屏幕阅读启用,它会读出你的图片名称。因此你要确保图片名称清晰合理以免令用户困惑。或者,你也可以用 Image(decorative:) 构造器来明确这个名称不需要被读出来。

由于按钮的第二种形式支持包含任何类型的视图,你可以直接用一个图像:

Button(action: {print("Edit button was tapped")
}) { Image(systemName: "pencil")
}

当然你也可以组合图像和文字:

Button(action: {print("Edit button was tapped")
}) {HStack(spacing: 10) { Image(systemName: "pencil")Text("Edit")}
}

提示:如果你的图像被填充了某个颜色,比如一个纯蓝色。这可能是因为 SwiftUI 将它们着色以表明图像是可点击的。为了解决这个问题,你可以用renderingMode(.original) 修改器来强制 SwiftUI 显示原始的图像而不是着色后的版本。


译自 Showing alert messages

显示 Alert 消息

如果某件重要的事情发生,一种常见的通知用户的方式是使用 alert – 这是一种包含标题,消息,一到两个按钮的弹出式窗口。

思考一下:什么时候 alert 应当被展示?如何展示?视图是状态的函数,alerts 也不例外。因此,与其说是“显示 alert”,不如说我们创建 alert 并且设置展示的条件。

一个基本的 SwiftUI alert 有标题,消息,和一个 dismiss 按钮,就像这样:

Alert(title: Text("Hello SwiftUI!"), message: Text("This is some detail message"), dismissButton: .default(Text("OK")))

如果你需要的话,可以添加更多代码来配置按钮的细节。更有趣的是,我们展示 alert 的方式:我们并不会把 alert 赋给某个变量然后调用 myAlert.show()这样的代码,因为这样就又回到了“事件序列”的思维方式。

取而代之的是,我们创建一个 alert 是否显示的状态,像这样:

@State private var showingAlert = false

然后,我们把 alert 附着在UI的某个地方,并且告诉它使用上面那个状态来决定是否呈现 alert。SwiftUI 会观察 showingAlert状态,只要它变成 true,就会展示 alert。

下面是演示代码,当按钮被点击时,显示 alert:

struct ContentView: View {@State private var showingAlert = falsevar body: some View {Button("Show Alert") {self.showingAlert = true}.alert(isPresented: $showingAlert) {Alert(title: Text("Hello SwiftUI!"), message: Text("This is some detail message"), dismissButton: .default(Text("OK")))}}
}

上面的代码是把 alert 依附在 button 上,不过实际上alert() 修改器被应用于哪里其实无所谓,我们所做的就是当 showingAlert 为真时展示 alert。

近距离检视一下alert() 修改器:

.alert(isPresented: $showingAlert)

这里又是一个双向绑定,因此当你关掉 alert 弹窗时 SwiftUI 会自动showingAlert 设置回 false。


我的公众号 这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~

441e2d9d5db03b71ff49905a571bda63.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql数据存储到指定位置_Mysql数据库表分区存储到指定磁盘路径

. 前提:mysql5.6.6以上的版本以上的版本才支持单表指定目录,且目录权限是MySQL:mysql。 在mysql中数据文件存放于在my.cnf中datadir指定的路径,使用的表引擎不同产生的文件格式、表文件个数也会有所差异。 mysql的表引擎有多种,…

roslyn分析字符串代码_.NET 5 源代码生成器——MediatR——CQRS

在这篇文章中,我们将探索如何使用.NET 5中的新source generator特性,使用MediatR库和CQRS模式自动为系统生成API。中介者模式中介模式是在应用程序中解耦模块的一种方式。在基于web的应用程序中,它通常用于将前端与业务逻辑的解耦。在.NET平台…

mysql2008怎么重装_SQL Server2005、2008如何彻底删除卸载并重新安装?

很多小伙伴在删除SQL Server后重新安装总是遇到诸多问题导致安装失败,这是因为你没有将SQL Server彻底删除卸载完毕。本文就如何彻底卸载进行详细介绍,本文以SQL Server2008为例,2005的方法相似。方法/步骤1.按照传统方法将SQL Server 2005、…

mysql主从复制 火墙_MySQL高级知识(十五)——主从复制

前言:本章主要讲解MySQL主从复制的操作步骤。由于环境限制,主机使用Windows环境,从机使用用Linux环境。另外MySQL的版本最好一致,笔者采用的MySQL5.7.22版本,具体安装过程请查询相关资料。1.主从复制的基本原理slave会…

正则只能出现特定字符_python正则表达式的简单使用总结

原文作者:小哲,雷锋网在编程中,经常会涉及到字符串的操作,一个常用的策略就是利用split函数,然后对于特定的字符串进行匹配,但是这种方法格式复杂,可复用性较差。正则表达式是处理字符串匹配一个…

MySQL配置日志服务器_mysql配置数据库日志

mysql配置数据库日志云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷…

mysql dos 下切换连接_如何在dos下连接进入mysql对数据库进行操作

一、:windowsR 进入命令命令提示符输入 net start mysql若出现系统错误,要将命令提示符以管理员身份运行若出现不是内部指令,进入下面环境变量设置界面,配置path路径1.进入系统查看界面,点击高级系统设置2&#xff0c…

java获取文件大小_Java中获取文件大小的详解及实例代码

Java 获取文件大小今天写代码时需要实现获取文件大小的功能,目前有两种实现方法,一种是使用File的length()方法;另外一种是使用FileInputStream的available()方法,当InputStream未进行read操作时,available()的大小应该…

java如何获得当前路径_在java中如何得到当前路径

归纳一些网上取java路径的方法:注明:如果从ANT启动程序,this.getClass().getResource("")取出来的比较怪,直接用JAVA命令行调试就可成功。得到classpath和当前类的绝对路径的一些方法获得CLASSPATH之外路径的方法&#…

java继承总结_JAVA笔记:Java中的继承总结

继承:在Java中使用extends关键字来实现类的继承 ,extends意思就是派生,所以子类也叫派生类,继承的主要目的是扩展类的内容操作格式: class A{}; class B extends A{};子类B可以继承父类A中的公用方法,也可…

java正则表达式 类_java正则表达式相关类的使用

import java.util.regex.Matcher;import java.util.regex.Pattern;public class TestZhengZe {public static void main(String[] args) {//匹配数字Pattern mac Pattern.compile("-?(0|([1-9][0-9]*))(\\.[0-9])?");System.out.println(mac.matcher("101.00…

单利 java_Java设计模式-单利模式

单例模式作为对象的创建模式,单例模式确保其某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类。单例模式有以下特点:1、单例类只能有一个实例2、单例类必须自己创建自己的唯一实例3、单例类必须给其…

java定义private_java9开始——接口中可以定义private私有方法

在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法。只允许我们定义public访问权限的方法、抽象方法或静态方法。但是从Java 9 开始,Interface 接口中允许定义私有方法和私有静态方法。下面我们就来…

链表每k个反转 java_K 个一组翻转链表

leetcode第25题(困难)问题描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给…

phpcms上传php,phpcms如何上传视频

phpcms如何上传视频?phpcms-v9上传视频文件时的解决方案1.不建议直接在后台上传视频文件,因为视频文件一般都比较大,直接上传影响带宽;可先通过ftp工具将视频文件上传到指定目录,然后再后台引入视频文件的地址即可2.如…

护卫神怎么重启php,护卫神·主机大师如何开启php_opcache_护卫神

护卫神主机大师支持5.5至7.3这几个版本开启php_opcache扩展。一,先打开护卫神主机大师面板-常用操作-打开软件目录二,打开phpweb目录,找到要开启opcache的php版本,比如我这里要在php5.5中开启,进入php55目录&#xff0…

java 去除 quot,JAVA去除web页面传入后台的特殊字符工具类 | 学步园

package www.tmzskj.com.utils;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.junit.Test;/*** 功能 过滤特殊字符,清除掉所有特殊字符* regEx 为要清除的字符* author admin**/public class StringFilterTest {public static String …

matlab中的terminator模块,2.2 Ground 及 Terminator模块

课时:117节课时长:20.1小时课级:中级提高simulink是matlab中的一种可视化仿真工具, 是一种基于matlab的框图设计环境,是实现动态系统建模、仿真和分析的一个软件包,被广泛应用于线性系统、非线性系统、数字…

oracle判断数据出现交叉,Oracle!你必须要知道的Knowledge points(一)

一、入门oracle有四个用户,分别为sys、system、sysman和scott,其中sys是oracle权限最高的用户,类似于Linux系统的root,scott是示例用户,上课就以这个用户里的三张员工表empno、dept、salgrade作为示例来授课。启动服务1. 快捷键ct…

php上传中文图片,用PHP处理图片文件的上传

这篇文章主要介绍了关于用PHP处理图片文件的上传&#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下1.html文件form表单注意。enctype属性代码&#xff1a;<?php require(../../public/common/config.php);$sqlClass "s…