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

2023-05-16

在这里插入图片描述

概览

有些情况下,我们需要为文本编辑器实现文本的查找和替换功能(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 = false

    var 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 = false

    var 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 = false

    var 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 知识的精彩博文,请移步 开发疑难秒懂百科
    专栏欣赏。

感谢观赏,再会!😉

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

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

  • 基于springboot的作业管理系统设计与实现

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

随机推荐