SwiftUI 新 Alert 弹出窗口圆你文本输入之梦

2023-05-16

在这里插入图片描述

概览

小伙伴们都知道,弹出 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 知识的精彩博文,请移步 开发疑难秒懂百科
    专栏欣赏。

感谢观赏,再会!😉

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI 新 Alert 弹出窗口圆你文本输入之梦 的相关文章

  • 基于springboot的鲜花销售商城网站

    项目描述 临近学期结束 xff0c 还是毕业设计 xff0c 你还在做java程序网络编程 xff0c 期末作业 xff0c 老师的作业要求觉得大了吗 不知道毕业设计该怎么办 网页功能的数量是否太多 没有合适的类型或系统 等等 这里根据疫情
  • 基于ssm的社区疫情返乡管控系统设计实现

    项目描述 临近学期结束 xff0c 还是毕业设计 xff0c 你还在做java程序网络编程 xff0c 期末作业 xff0c 老师的作业要求觉得大了吗 不知道毕业设计该怎么办 网页功能的数量是否太多 没有合适的类型或系统 等等 这里根据疫情
  • 基于JavaWeb的大学迎新系统设计与实现(源码+数据库脚本+论文+开题报告)

    项目描述 临近学期结束 xff0c 还是毕业设计 xff0c 你还在做java程序网络编程 xff0c 期末作业 xff0c 老师的作业要求觉得大了吗 不知道毕业设计该怎么办 网页功能的数量是否太多 没有合适的类型或系统 等等 这里根据疫情
  • 基于SSM的网红书购物商城(源码+论文+开题报告+答辩PPT)

    项目描述 临近学期结束 xff0c 还是毕业设计 xff0c 你还在做java程序网络编程 xff0c 期末作业 xff0c 老师的作业要求觉得大了吗 不知道毕业设计该怎么办 网页功能的数量是否太多 没有合适的类型或系统 等等 这里根据疫情
  • 一、Scala编程语言基础

    一 scala基础 xff1a 前语 xff1a 本文章是作者在学习Scala语言时记录的 xff0c 是在linux系统中 xff0c 通过终端shell命令使用Scala语言进行练习 xff0c 参考了厦门大学数据库实验中的内容 如果有
  • 基于SSM网上商城购物系统的设计与实现

    项目描述 临近学期结束 xff0c 还是毕业设计 xff0c 你还在做java程序网络编程 xff0c 期末作业 xff0c 老师的作业要求觉得大了吗 不知道毕业设计该怎么办 网页功能的数量是否太多 没有合适的类型或系统 等等 这里根据疫情
  • 基于SSM的学生考勤管理系统的设计与实现

    项目描述 临近学期结束 xff0c 还是毕业设计 xff0c 你还在做java程序网络编程 xff0c 期末作业 xff0c 老师的作业要求觉得大了吗 不知道毕业设计该怎么办 网页功能的数量是否太多 没有合适的类型或系统 等等 这里根据疫情
  • 基于JavaWeb的宿舍管理系统的设计与实现

    项目描述 临近学期结束 xff0c 还是毕业设计 xff0c 你还在做java程序网络编程 xff0c 期末作业 xff0c 老师的作业要求觉得大了吗 不知道毕业设计该怎么办 网页功能的数量是否太多 没有合适的类型或系统 等等 这里根据疫情
  • 今天给大家介绍一篇基于SSM的教材管理系統的设计与实现

    项目描述 临近学期结束 xff0c 还是毕业设计 xff0c 你还在做java程序网络编程 xff0c 期末作业 xff0c 老师的作业要求觉得大了吗 不知道毕业设计该怎么办 网页功能的数量是否太多 没有合适的类型或系统 等等 这里根据疫情
  • 教材征订和下发系统

    项目描述 临近学期结束 xff0c 还是毕业设计 xff0c 你还在做java程序网络编程 xff0c 期末作业 xff0c 老师的作业要求觉得大了吗 不知道毕业设计该怎么办 网页功能的数量是否太多 没有合适的类型或系统 等等 这里根据疫情
  • 基于SSM的企业管理系统

    项目描述 临近学期结束 xff0c 还是毕业设计 xff0c 你还在做java程序网络编程 xff0c 期末作业 xff0c 老师的作业要求觉得大了吗 不知道毕业设计该怎么办 网页功能的数量是否太多 没有合适的类型或系统 等等 这里根据疫情
  • jsp点击事件大全

    lt input onclick 61 34 document all WebBrowser ExecWB 1 1 34 type 61 34 button 34 value 61 34 打开 34 name 61 34 Button1 3
  • MySql数据查询中 left join 条件位置区别

    A 和 B 两张表都只有一个 ID 字段 比如A表的数据为 ID 1 2 3 4 5 6 B表的数据为 ID 1 2 3 判断 JOIN 查询时候条件在 ON 和 WHERE 时的区别 ON 和 WHERE 查询顺序有关 标准查询关键字执行
  • 身份证规则验证 Java代码

    package com mxg hmms util import java text SimpleDateFormat import java util Date 验证身份证号码 身份证号码 可以解析身份证号码的各个字段 xff0c 以及验
  • JAVA 定时器的三种方法

    package com utils import java util Calendar import java util Date import java util Timer import java util TimerTask Crea
  • 【python】文本处理:删除包含关键词的行、删除指定列、删除指定字符、替换关键字……

    目录 1 行处理 删除文件中包含关键词的行 删除TXT中的带 不带指定字符的行 xff08 并保留带指定字符的行 xff09 删除匹配or不匹配某些条件的行 2 字符处理 删除特定字符 1 1 删除特定位置的字符 1 2 删除指定字符 1
  • MySql按周,按月,按日分组统计数据

    MySql按周 xff0c 按月 xff0c 按日分组统计数据 DATE FORMAT select DATE FORMAT create time 39 Y u 39 weeks count caseid count from tc ca
  • Linux中编辑定时执行shell脚本,清除tomcat日志

    linux定时执行shell脚本 写一个shell脚本 xff0c 定时执行简单示例 很多时候我们有希望服务器定时去运行一个脚本来触发一个操作 xff0c 比如说定时去备份服务器数据 数据库数据等 不适合人工经常做的一些操作这里简单说下 S
  • Linux中的远程登录服务

    1 实验环境 两台单网卡的主机 一台为服务器 xff0c 主机名为westos system xff0c ip地址为192 168 2 100 一台为客户端 xff0c 主机名为westos client xff0c ip地址为192 16
  • 线程调度的方法()

    1 sleep 在睡眠的时候 会释放cpu 让给其他线程执行 即使没有其他线程 抢占cpu 也需要等待睡眠时间到了以后才能真正的指定 package com qf demo3 span class hljs keyword public s

随机推荐