swiftui - swiftui中的自动完成搜索不起作用
问题描述
我有一个 TextField 作为搜索框。我想让它自动搜索,即每当我在 TextField 中输入一个字母时,我应该不按回车就得到结果。这是我的代码:
TextField("Search", text: $searchText,
onEditingChanged: {
isEditing in
print("isEditing")
//my method to fetch result
}, onCommit: {
print("onCommit")
})
但它不是那样工作的。在文本字段中输入一个字母后,当我按下回车键时,它首先打印“onCommit”,然后打印“isEditing”。知道如何让它工作吗?
解决方案
在您的情况下,我想使用组合框架的Just
订阅者。请检查该.onReceive
部分以了解。这是经过测试的代码。Just
是一个发布者,它只向每个订阅者发出一次输出,然后完成。
因此,当它检测到更改时,它会发布并.onReceiver
捕获该更改。
import SwiftUI
import Combine
struct TestView: View {
@State var searchText: String = ""
var body: some View {
VStack {
TextField("Search", text: $searchText,
onEditingChanged: {
isEditing in
print("isEditing")
//my method to fetch result
}, onCommit: {
print("onCommit")
})
.onReceive(Just(searchText), perform: { _ in
if searchText.count > 0 {
print("Text entered: \(searchText). Now do whatever you want")
}
})
}
}
}
推荐阅读
- python - RandomForest搜索参数中hyperopt的ValueError
- python - urllib.request 的 urlopen 无法在 python 3.7 中打开页面
- python - What package does taskwarrior use to generate the tables on the command line?
- apache - 更新我的让我们加密证书时出错
- heroku - 配置 Puppeteer 以下载 Chromium Binary 而不是编译它
- java - Java 接口实现 - 自动初始化器
- flask - 如何返回 2 个服务器响应,一个是在打开 URL 之后,另一个是在使用烧瓶中的 Restplus 执行 URL 中的请求之后?
- excel - 使用vba过滤excel时如何修复“运行时错误'5'
- angular - 如何在角度材料选择列表中设置默认选择值?
- python-3.x - tkinter 不同的条目具有相同的值