当前位置: 首页 > news >正文

SwiftUI 如何让文本自动支持查找和替换功能?

在这里插入图片描述

概览

有些情况下,我们需要为文本编辑器实现文本的查找和替换功能(find & replace),如果完全靠自已撸码还是比较棘手的。

所幸的是,从 SwiftUI 4.0 (iOS 16)开始,Apple 已经将查找与替换功能原生嵌入到 TextEditor 中了:

在这里插入图片描述

只需几行代码,我们即能恣意任性实现文本查找和替换功能的开启与关闭,以及其它定制细节。

在本篇博文中,就让我们一起来看看如何轻松实现它吧!

Let‘s go!!!😉


开启和关闭

从 SwiftUI 4.0 开始,TextEditor 已经可以原生支持查找和替换功能了。

struct ContentView: View {@State private var bio = "Describe someone, Thanks./n contained no UIScene configuration dictionary (looking for configuration named BEST!"@State private var isShowingFindNavigator = falsevar body: some View {NavigationStack {TextEditor(text: $bio).font(.title).padding().navigationTitle("查找与替换DEMO")}}
}

如果设备已连接物理键盘,我们可以使用键盘快捷键 Cmd+F 开启查找界面,用 Option+Cmd+F 来开启替换界面:

在这里插入图片描述

我们还可以在 TextEditor 上调用 findNavigator() 修改器方法来手动启用和关闭查找和替换界面:

struct ContentView: View {@State private var bio = "Describe someone, Thanks./n contained no UIScene configuration dictionary (looking for configuration named BEST!"@State private var isShowingFindNavigator = falsevar body: some View {NavigationStack {TextEditor(text: $bio).font(.title).findNavigator(isPresented: $isShowingFindNavigator).toolbar {Button("打开查找与替换") {isShowingFindNavigator.toggle()}}.padding().navigationTitle("查找与替换DEMO")}}
}

默认情况下,findNavigator() 首先弹出查找界面,我们可以点击其中的放大镜小图标来继续显示替换界面:

在这里插入图片描述

需要注意的是:在 Xcode 14.2 预览中无法通过此种方法来显示替换界面,必须在模拟器或真机中才可以。

自定义条件

有些情况下,我们可能不希望 TextEditor 响应查找或替换功能。

这可以通过在 TextEditor 上调用 replaceDisabled() 或 findDisabled() 修改器来实现:

struct ContentView: View {@State private var bio = "Describe someone, Thanks./n contained no UIScene configuration dictionary (looking for configuration named BEST!"@State private var isShowingFindNavigator = falsevar body: some View {NavigationStack {TextEditor(text: $bio).font(.title)// 不开启文本替换功能.replaceDisabled(true).findNavigator(isPresented: $isShowingFindNavigator).toolbar {Button("打开查找与替换") {isShowingFindNavigator.toggle()}}.padding().navigationTitle("查找与替换DEMO")}}
}

如上代码所示,我们为 TextEditor 关闭了文本替换功能(依然支持查找)。

再次运行 App,现在已无法显示替换界面了:

在这里插入图片描述

总结

在本篇博文中,我们通过 SwiftUI 4.0(iOS 16+)原生提供的支持,仅用几行代码就实现了文本的查找与替换功能,棒棒哒!

  • 更多关于 TextField 视图相关的操作,请猛戳 SwiftUI如何让绑定到同一个状态的多个TextField呈现出不同输入行为 链接观赏。

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

感谢观赏,再会!😉

相关文章:

SwiftUI 如何让文本自动支持查找和替换功能?

概览 有些情况下,我们需要为文本编辑器实现文本的查找和替换功能(find & replace),如果完全靠自已撸码还是比较棘手的。 所幸的是,从 SwiftUI 4.0 (iOS 16)开始,Apple 已经将查…...

SpringCloud全面学习笔记之初尝美妙篇

目录 前言初识微服务单体架构分布式架构微服务架构初见SpringCloud微服务治理分布式服务架构案例 微服务组件及使用Eureka注册中心提供者和消费者Eureka的结构和作用搭建Eureka服务注册服务服务发现Eureka注册服务总结 Ribbon负载均衡原理负载均衡原理负载均衡策略懒加载 Nacos…...

Spring MVC框架

Spring MVC框架 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spri…...

Illustrator如何使用图层与蒙版之实例演示?

文章目录 0.引言1.绘制可爱冰淇淋图标2.霓虹渐变立体文字海报3.炫彩花纹背景 0.引言 因科研等多场景需要进行绘图处理,笔者对Illustrator进行了学习,本文通过《Illustrator CC2018基础与实战》及其配套素材结合网上相关资料进行学习笔记总结,…...

Office Tool Plus的使用

是否为安装,卸载,激活Office而烦恼? 下载 地址:Office Tool Plus 官方网站 - 一键部署 Office 安装office 先安装Office,Office_Pro_Plus_2021_LTSCProjectVisio_x64_zh_CN_VL_2022-02 注意,要安装批量…...

​射频PCB 设计​的六大条技巧

即使是最自信的设计人员,对于射频电路也往往望而却步,因为它会带来巨大的设计挑战,并且需要专业的设计和分析工具。这里将为您介绍六条技巧,来帮助您简化任何射频PCB 设计任务和减轻工作压力! 1、保持完好、精确的射频…...

优化了成本和安装难度后,UWB信标能否取代蓝牙信标?

1 我们做安U3号是要解决什么问题? (1)信标式设计,解决传统UWB基站安装过程繁琐复杂的问题 传统UWB基站在安装过程中遇上的难题: l 安装位置选取问题:UWB基站的准确度与其安装位置有很大关系,…...

深入理解Java虚拟机——垃圾回收算法

1.前言 垃圾回收需要完成的三件事 首先我们需要明白垃圾回收需要完成的三件事: 哪些内存需要回收 堆内存中的对象所使用的内存方法区中的废弃的常量以及不再使用的类型 什么时候回收 当对象死亡方法区中某些内容(常量和类型)不再被使用 如…...

git-rebase和merge

A-----B----C----D master E----F-----G feature 为了把main分支里新增的代码应用在你的feature分支,你有两种方法:merge 和 rebase。 merge git checkout feature git merge main A-----B----C----D master E----F-----G -----* feature (合并master…...

【JavaWeb 用户认证】Cookie、Session、Token、JWT、Interceptor、SpringBoot、Spring Security

Token基本了解:【详细阐述Token的来源】公钥私钥基本了解:【理解公钥】 文章目录 一、Cookie 经典介绍以及使用案例二、Session 经典介绍以及拦截登录案例三、Token MySQL 的基本介绍及其基本使用四、JWT 基本介绍及其基本讲解五、SpringBoot 使用拦截器…...

6个月的测试,来面试居然要15K,我一问连5K都不值

2023年4月份我入职了深圳某家创业公司,刚入职还是很兴奋的,到公司一看我傻了,公司除了我一个自动化测试,公司的测试人员就只有2个开发3个前端1个测试还有2个UI,在粗略了解公司的业务后才发现是一个从零开始的项目&…...

RSA--维纳攻击--代码和题目分析

文章目录 维纳攻击原理:维纳攻击脚本[羊城杯 2020]RRRRRRRSA 1题目描述:题目分析: 收获与体会: 维纳攻击原理: 两位大佬讲得非常清楚(搬运工就是我):https://zhuanlan.zhihu.com/p/…...

飞腾ft2000-麒麟V10-SP1安装Docker、运行gitlab容器

目录 一、安装及配置docker 1、卸载docker相关包及删除相关配置文件 2、安装二进制docker 1.下载软件包 2.解压 3.修改镜像加速地址 4.修改profile文件 5.启动docker 6.docker常用命令 二、安装并启动gitlab镜像 1.安装gitlab镜像 1.查询满足使用需求的gitlab版本 2…...

C++ 的类型转换

目录 1. C语言中的类型转换 2. C强制类型转换 2.1static_cast 2.2 reinterpret_cast 2.3 const_cast 2.4 dynamic_cast 3. RTTI(了解) 1. C语言中的类型转换 在 C 语言中,如果 赋值运算符左右两侧类型不同,或者形参与实参类型不…...

【Windows】普通控制台EXE程序转为windows服务方式运行的详细步骤

背景 NSSM(Non-Sucking Service Manager)是一个免费的第三方Windows服务管理器,可以将任何可执行文件转换为Windows服务。官网下载地址为:https://nssm.cc/download 以下是NSSM配置Windows服务的详细步骤和注意事项: …...

NSSCTF [suctf 2019]hardcpp WP 控制流混淆

下载文件,64位主函数非常多循环 去控制流混淆,脚本下载deflat 用法 python 脚本名 文件名 起始地址例如主函数地址是0x4007E0 python deflat.py hardCpp 0x4007E0然后就生成了去混淆的文件 主函数非常大,开始分析逻辑 puts("func(?…...

计算机毕业论文内容参考|基于神经网络的网络安全态势感知技术研究

文章目录 导文文章重点摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍技术分析技术设计技术实现总结与展望导文 基于神经网络的网络安全态势感知技术研究 文章重点 摘要 随着互联网的快速发展,网络攻击的频率和复杂度也在逐年增加。为了更好地保护信息系统…...

Flask框架之Request、Response、Cookies、Session等对象的使用

Request、Response、Cookies、Session等对象的使用 Request对象基本使用参数的获取转换器内置转换器自定义转换器 Response对象基本使用返回模板重定向返回JSON Cookies对象设置cookie获取cookie删除cookie Session会话对象设置SECRET_KEY设置会话获取会话释放会话 Request对象…...

信号与槽机制一

一、信号与槽 1、什么是信号与槽? 信号和槽是用于对象之间的通信,它是Qt的核心机制,在Qt编程中有着广泛的应用。如果想学好Qt,一定要充分掌握信号的槽的概念与使用。 2、信号和槽的代码实例 在Qt中,发送对象、发送的信…...

nodejs 复制文件到指定目录

var fs require(fs), path require(path), exec require(child_process).exec, sourcePath, targetPath; //获取命令行中的路径 process.argv.forEach(function (val, index, array) { if (index 2) { sourcePath val; } if (index 3) { targetPath val; } }); // 定义…...

RAGAS 0.2.4 + Ollama本地大模型:手把手教你生成高质量RAG测试数据集(含踩坑实录)

RAGAS 0.2.4与Ollama本地大模型实战:构建高可靠性RAG测试数据集的深度指南 当我们需要评估一个检索增强生成(RAG)系统的性能时,高质量的测试数据集是关键。然而,依赖云端大模型服务不仅成本高昂,还可能面临…...

保姆级教程:深求·墨鉴Podman部署全流程,小白也能轻松搞定

保姆级教程:深求墨鉴Podman部署全流程,小白也能轻松搞定 1. 为什么选择Podman部署深求墨鉴? 传统Docker部署方式虽然常见,但对于深求墨鉴这样的轻量级OCR工具来说,Podman提供了更优雅的解决方案。Podman是一款无需守…...

OpenClaw+Qwen3.5-4B-Claude:个人知识库自动化更新方案

OpenClawQwen3.5-4B-Claude:个人知识库自动化更新方案 1. 为什么需要自动化知识管理 作为一个每天需要处理大量技术资料的研究者,我发现自己陷入了一个困境:收藏的文章越来越多,但真正消化吸收的内容却越来越少。上周整理笔记时…...

上海优质seo公司推荐_上海seo公司的优势在哪里

<h3 id"seo_seo">上海优质seo公司推荐_上海seo公司的优势在哪里</h3> <p>在当今互联网营销的时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为企业提升网站流量、品牌知名度的重要手段。特别是在经济发达的大都市上海&#xff0c…...

3个技巧快速解锁百度网盘SVIP下载特权

3个技巧快速解锁百度网盘SVIP下载特权 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 你是否曾因百度网盘Mac版的下载速度而苦恼&#xff1f;普通用户下…...

系统移植-STM32MP1_TF-A概述

文章目录 1 设备安全2 TF-A简介3 ARMv7和ARMv8权限等级3.1 ARMv7-A工作模式3.2 ARMv8工作模式 4 TF-A不同启动阶段4.1 bl14.2 bl24.3 bl314.4 bl324.5 bl33 5 STM32MP1中的TF-A5.1 STM32MP1_TF-A框架5.1.1 STM32MP1下的bl15.1.2 STM32MP1下的bl25.1.3 STM32MP1下的bl325.1.4 ST…...

Altium Designer16禁止区域设置避坑指南:为什么你的剪切块总是不生效?

Altium Designer 16禁止区域设置避坑指南&#xff1a;为什么你的剪切块总是不生效&#xff1f; 在PCB设计过程中&#xff0c;禁止区域(Keep-Out Region)的设置是确保电路板可靠性的重要环节。然而&#xff0c;许多Altium Designer 16用户在实际操作中经常遇到剪切块转换失败的问…...

C#实战:5分钟搞定Modbus RTU通讯(基于NModbus4库)

C#实战&#xff1a;5分钟搞定Modbus RTU通讯&#xff08;基于NModbus4库&#xff09; 工业自动化领域的数据采集离不开设备通讯协议的支持&#xff0c;而Modbus RTU作为最广泛应用的串行通信协议之一&#xff0c;几乎成为工控开发者的必修课。今天我们就用C#和NModbus4库&#…...

别再只会用滑动平均了!用Python从零实现数字陷波器,精准滤除50Hz工频干扰

从零构建Python数字陷波器&#xff1a;精准滤除50Hz工频干扰的工程实践 当你在深夜调试一个心爱的传感器项目时&#xff0c;突然发现采集到的数据波形上叠加了一个顽固的50Hz正弦波——这种经历想必不少硬件开发者都深有体会。工频干扰就像电子世界中的背景噪音&#xff0c;无…...

OpenClaw+Qwen3.5-9B实战:5步完成本地AI助手部署与飞书接入

OpenClawQwen3.5-9B实战&#xff1a;5步完成本地AI助手部署与飞书接入 1. 为什么选择OpenClawQwen3.5-9B组合&#xff1f; 去年冬天&#xff0c;当我第5次因为忘记整理会议录音而被领导提醒时&#xff0c;终于决定给自己找个"数字助理"。在尝试了多个自动化工具后&…...