我希望允许用户过滤长列表中的数据,以便更轻松地找到匹配的标题。
我已将TextView放置在导航栏中:
.navigationBarTitle(Text("Library"))
.navigationBarItems(trailing: TextField("search", text: $modelData.searchString)
我有一个可观察的对象,它可以响应搜索字符串中的变化:
class DataModel: ObservableObject {
@Published var modelData: [PDFSummary]
@Published var searchString = "" {
didSet {
if searchString == "" {
modelData = Realm.studyHallRealm.objects(PDFSummary.self).sorted(by: { $0.name < $1.name })
} else {
modelData = Realm.studyHallRealm.objects(PDFSummary.self).sorted(by: { $0.name < $1.name }).filter({ $0.name.lowercased().contains(searchString.lowercased()) })
}
}
}
一切正常,除了我必须在输入每个字母后点击字段。由于某些原因,输入每个字母后,焦点将移离字段(除非我点击建议的自动更正-整个字符串立即正确添加到字符串中)