SwiftUI 新 Alert 弹出窗口帮你实现文本输入之梦

news2024/10/5 13:29:23

在这里插入图片描述

概览

小伙伴们都知道,弹出 Alert 不能包含文本输入框是 SwiftUI 的阿喀琉斯之踵(Achilles’ Heel) 。当然,这说的有些夸张了。😉

不过,Alert 不能包含 TextField 在某些情况下着实不方便。于是乎,从 SwiftUI 3.0(iOS 15+)开始,Apple 响应码农号召增加了这一功能:

在这里插入图片描述

想知道如何实现么?答案超乎寻常的简单!

闲言碎语不再讲,Let’s Go!!!😉


已废弃的旧 Alert

从 SwiftUI 诞生之日起,为了与 UIKit & AppKit 界面功能同步,Apple 创造了 Alert 视图专门用于小窗口的弹出操作:

在这里插入图片描述

不过, Alert 使用非常不灵活,其构造器使用起来非常死板:

在这里插入图片描述

我们只能按照规定弹出受限布局的窗口,最受诟病的就是其中不能嵌入文本输入框:

在这里插入图片描述

在这里插入图片描述

新 Alert 介绍

从 SwiftUI 3.0 开始,Apple 终于增强了 Alert 显示界面布局的表现力,我们可以妥妥的加入 TextField 等文本输入视图了:

在这里插入图片描述

func alert<S, A, M, T>(
    _ title: S,
    isPresented: Binding<Bool>,
    presenting data: T?, @ViewBuilder actions: (T) -> A, @ViewBuilder message: (T) -> M
) -> some View where S : StringProtocol, A : View, M : View

观察以上新 alert 修改器方法的签名可以发现:它将文本输入和按钮作为一组放在 actions 形参中,而将通知消息文本放在 message 形参中。

在 actions 实参中,我们可以自由组合 TextField、SecureField、Toggle(仅限 MacOS)、按钮等输入控件灵活的适配功能逻辑:

VStack {
    Button(role: .destructive, action: {
        isAlert = true
    }){
        Text("Alert!")
    }
    .alert("一大波僵尸正在靠近", isPresented: $isAlert, actions: {
    	// @ViewBuilder 的闭包,可以自由发挥随意组合视图...

		// SecureField 与 TextField 在 MacOS 中会被忽略
        SecureField("核武器启动密码", text: $pwd)
        TextField("当量", text: $power)
                
        Button(role: .destructive, action: {}){
            Text("核武器攻击!")
        }
        
        // 仅限 MacOS,iOS 中会被忽略
        Toggle("超级模式", isOn: $superMode)
        
        Button("再等等", role: .cancel, action: {})
    }){
        Text("距离大本营还有 \(Int.random(in: 0..<10000)) 公里...")
    }
}

下面是上述代码创建的 Alert 在 iOS 和 MacOS 中的弹出效果:

在这里插入图片描述

在这里插入图片描述

值得注意的是:MacOS 中的 Alert 不能显示文本输入视图,但可以显示 Toggle 视图(以按钮样式)。

现在,我们在遇到弹出窗口需要输入文本或密码的情况不会再捉襟见肘了,棒棒哒!💯🚀

总结

在本篇博文中,我们讨论了 SwiftUI 中新的 Alert 弹出窗口,使用它我们可以非常轻松的完成文本和密码的输入操作。

  • 更多关于 SwiftUI 知识的精彩博文,请移步 开发疑难秒懂百科
    专栏欣赏。

感谢观赏,再会!😉

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

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

相关文章

[pgrx开发postgresql数据库扩展]附1.存储过程的优缺点与数据库扩展函数

俗话说&#xff1a;天下大势&#xff0c;分久必合&#xff0c;合久必分。 最早的软件系统开发&#xff0c;讲究的就是一个全栈——在最早期的桌面软件时代&#xff0c;数据、用户界面和业务逻辑是完全混在一起的&#xff0c;讲究的就是一个一体化……那个年代也诞生了大量的码农…

MySQL基础(三)基本的SELECT语句

1. SQL概述 1.1 SQL背景知识 1946 年&#xff0c;世界上第一台电脑诞生&#xff0c;如今&#xff0c;借由这台电脑发展起来的互联网已经自成江湖。在这几十年里&#xff0c;无数的技术、产业在这片江湖里沉浮&#xff0c;有的方兴未艾&#xff0c;有的已经几幕兴衰。但在这片浩…

同步辐射散射数据处理:从测量到分析的全流程解析

同步辐射散射数据处理&#xff1a;从测量到分析的全流程解析 同步辐射&#xff08;Synchrotron radiation&#xff0c;SR&#xff09;是指粒子在强磁场中受到加速或转向时所放出的辐射。这种辐射是一种非常强烈、具有非常高能量和亮度的电磁辐射。同步辐射散射&#xff08;Sync…

怎么控制别人的电脑屏幕?

为什么需要控制别人的屏幕&#xff1f; 我们不可避免地会遇到一些情况&#xff0c;比如我们需要为我们的朋友、同事或家人提供有关 IT 相关问题的帮助&#xff0c;如果他们不知道它该怎么处理这些问题该怎么办呢&#xff1f; 这时&#xff0c;我们可能需要用我们的电脑…

聊点技术 | 全新功能,让Bonree ONE变得更强

4月21日&#xff0c;博睿数据ONE有引力2023春季产品发布会圆满落幕&#xff0c;Bonree ONE 2023春季正式版正式发布&#xff0c;带来更轻、更强、更智能的一体化智能可观测平台。 全新功能&#xff0c;让Bonree ONE变得更强 本文作者 产品经理高天明、产品经理吴学飞、产品经…

Mysql监控账号创建【Prometheus】

Mysql的监控采用一个使用mysqld_exporter启动多个进程来实现监控多个mysql实例。 代理部署架构如下 1&#xff0c;创建数据库监控账号 create user 监控账号mysqld_exporter主机的IP identified by 监控密码 with max_user_connections 10; 2&#xff0c;权限授予 grant pr…

KDSL-82-1000A大电流发生器

一、产品简介 KDSL-82-1000A大电流发生器&#xff08;简称升流器&#xff09;&#xff0c;我公司自行研制开发的测试设备&#xff0c;它集国内外同类产品的优点于一身&#xff0c;采用数控技术&#xff0c;抗干扰能力强&#xff0c;和上一代升流器相比&#xff0c;由于采用低功…

NetSuite .id的用法

我们必须认清一个事实&#xff0c;NetSuite Saved Search是一个被封装化的SQL查询工具。在NetSuite的早期版本中&#xff0c;可以利用Formula字段做很多SQL语句上的灰色应用。但是慢慢的&#xff0c;灰色应用范围被压缩了。目前只剩下一个“.id”的应用了。 今朝我们就谈谈.id…

网络管理员优化提高网络性能需要关注的三个指标

网络管理员有一个主要责任&#xff1a;确保其网络的正常运行时间&#xff0c;同时不影响网络性能。然而&#xff0c;随着现代可部署解决方案通过传统的网络架构&#xff0c;这说起来容易做起来难。尽管现代解决方案在效率方面绝对比传统解决方案更上一层楼&#xff0c;但它们也…

任务态相关的一些知识总结

静息态的数据处理现在都比较简单了&#xff0c;因为有了fmriprep和qsiprep流程工具&#xff0c;没有特别的难度。 而关于任务态&#xff0c;则有一些独特的处理方式&#xff0c;因为最近要做任务态的数据分析&#xff0c;所以学习一下。 先学习下R的4个重输出函数&#xff1a;…

更懂业务的数智平台,应对数智化转型的“千变万化”

本文作者 跨界的申斯基 毫无疑问&#xff0c;随着数智化转型的加速&#xff0c;越来越多的企业正在把数智化战略提升到一个全新的高度&#xff0c;转型的进程也正从“浅层次”的数智化走向“深层次”数智化的阶段。 这也让企业的数智化转型进入到了一个全新的阶段&#xff0c;…

windows权限维持之shift后门

原理&#xff1a;沾滞键的目的是为了帮助那些按键有困难的人设计的&#xff0c;在Windows系统下连续按5次shift键后&#xff0c;系统就会执行C:\Windows\System32下的sethc.exe&#xff0c;也就是启用了沾滞键&#xff0c;但是当我们将shell.exe文件把sethc.exe文件通过更改名称…

AI 工具合辑盘点(七)持续更新 之 AI 音乐制作工具

AI 音乐制作工具 AI 也正在民主化音乐。它正在改变音乐创作的方式&#xff0c;赋予每个人成为音乐家的机会。创作音乐杰作所需的一切只是一个想法、一台电脑和一个 AI 音乐生成器。&#x1f3b6; AI 生成的音乐可以在几分钟内创作出来&#xff0c;结果取决于你的提示——几乎…

Python-web开发学习笔记(1)--- HTML基础

大家好&#xff0c;我是尚拙谨言&#xff0c;欢迎来到本专栏。本专栏主要是为web开发学习服务的&#xff0c;一共分为3个部分&#xff1a;前端介绍、数据库、Django&#xff0c;均为python web开发的学习笔记&#xff0c;希望能帮助到大家&#xff0c;也以此作为我个人的学习记…

Qt 从入门到入土【下篇】

Qt 从入门到入土【上篇】 推荐一个非常好的视频 本文目录 6. 对话框QDialog6.1 基本概念6.2 标准对话框6.3 自定义消息框6.4 消息对话框6.5 标准文件对话框 7. 布局管理器7.1 系统提供的布局控件7.2 利用widget做布局 8. 常用控件8.1 QLabel 控件使用8.2 QLineEdit8.3 其他控件…

从不同视角来看待API数据接口

一、作为产品经理向客户推广API数据接口&#xff0c;需要注意以下几点&#xff1a; 1.了解目标客户&#xff1a;在推广API数据接口之前&#xff0c;首先需要了解目标客户的需求和痛点&#xff0c;针对客户的实际情况提供更具体化的解决方案。 2.强调API接口的价值&#xff1a…

Istio 故障注入之延时(fixedDelay)、中断(abort)

Istio 故障注入 Istio 故障注入与其他在网络层引入错误&#xff08;例如延迟数据包或者直接杀死 Pod&#xff09;的机制不同&#xff0c;Istio 允许在应用程序层注入故障。这使得可以注入更多相关的故障&#xff0c;比如 HTTP 错误代码等。 Istio 可以注入两种类型的故障&…

springboot整合vue2-uploader文件分片上传、秒传、断点续传

1&#xff1a;vue-simple-uploader介绍 vue-simple-uploader是基于 simple-uploader.js 封装的vue上传插件。它的优点包括且不限于以下几种&#xff1a; 支持文件、多文件、文件夹上传&#xff1b;支持拖拽文件、文件夹上传可暂停、继续上传错误处理支持“秒传”&#xff0c;…

2023年博客之星入围选拔重装开启——今年没有拉票环节啦

2023年博客之星入围选拔开始啦&#xff01; 2022的博客之星大赛言犹在耳&#xff0c;2023的活动又接踵而至了。今年的博客之星&#xff08;包括博客新星&#xff09;的入围规则很简单&#xff1a; 2023年新规则 1.不需要拉票&#xff01;不喜欢这个环节的有福啦 2.从年初就…

python对医疗数据进行分析,看看哪个年龄段最容易生病

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 什么是数据分析 明确目的–获得数据(爬虫&#xff0c;现有&#xff0c;公开的数据)–数据预处理——数据可视化——结论 准备 环境使用&#xff1a; 在开始写我们的代码之前&#xff0c;我们要准备好运行代码的程序 Anacon…