![在这里插入图片描述](https://img-blog.csdnimg.cn/8c8ee8a4ab25495182600c2354de826d.jpeg#pic_center)
概览
有些情况下,我们需要为文本编辑器实现文本的查找和替换功能(find & replace),如果完全靠自已撸码还是比较棘手的。
所幸的是,从 SwiftUI 4.0 (iOS 16)开始,Apple 已经将查找与替换功能原生嵌入到 TextEditor 中了:
![在这里插入图片描述](https://img-blog.csdnimg.cn/e6b392f3f6304abfa197df99c54e02de.gif#pic_center)
只需几行代码,我们即能恣意任性实现文本查找和替换功能的开启与关闭,以及其它定制细节。
在本篇博文中,就让我们一起来看看如何轻松实现它吧!
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 来开启替换界面:
![在这里插入图片描述](https://img-blog.csdnimg.cn/d95dd6788c4349d8b3dbaa8c7d8e1ef5.png#pic_center)
我们还可以在 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() 首先弹出查找界面,我们可以点击其中的放大镜小图标来继续显示替换界面:
![在这里插入图片描述](https://img-blog.csdnimg.cn/4604d415129d473cb78be2d7de0e77b7.gif#pic_center)
需要注意的是:在 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,现在已无法显示替换界面了:
![在这里插入图片描述](https://img-blog.csdnimg.cn/0df2bf05af004eca94744a514c2847e2.gif#pic_center)
总结
在本篇博文中,我们通过 SwiftUI 4.0(iOS 16+)原生提供的支持,仅用几行代码就实现了文本的查找与替换功能,棒棒哒!
感谢观赏,再会!😉
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)