当前位置: 首页 > 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; } }); // 定义…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...