不知道如何在搜索栏下隐藏列表



一个简单的搜索表单(如电影等(,数据库中有一些信息,我进行了实时搜索,但由于某种原因,List参数显示了所有值​​​​在我开始键入搜索表单之前,从搜索表单下的数据库中,但结果应该在我键入关键字母或单词时显示救命!

内容视图:

import SwiftUI
import Firebase

struct ContentView: View {

@State var search = ""

@ObservedObject var data = getData()

var body: some View {

NavigationView{
List {
ForEach(self.data.datas.filter {(self.search.isEmpty ? true : $0.title.localizedCaseInsensitiveContains(self.search))}, id: .id) { rs in

NavigationLink(destination: Detail(data: rs)) {
Text(rs.title)
}
}
}
.navigationBarTitle("Search item")
.searchable(text: self.$search)

}
}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}


struct Detail : View {

var data : dataType

var body : some View{
VStack {
Text(data.title)
.font(.title)
.fontWeight(.bold)
Text(data.description)
}.padding()
}
}

您可以尝试这个示例代码,在搜索栏中键入内容之前,它不会显示任何内容。它还考虑了";HEEELP";。

struct ContentView: View {
@State var search = ""
@StateObject var data = getData() // <-- here
// -- here, replace `DataType` with your type of `data.datas`
var searchResults: [DataType] {
if search == "HEEELP" {
return data.datas  // return everything
} else {
return search.isEmpty
? []  // return nothing
: data.datas.filter{$0.title.localizedCaseInsensitiveContains(search)} // filtered
}
}
var body: some View {
NavigationView{
List {
ForEach(searchResults, id: .id) { rs in   // <-- here
NavigationLink(destination: Detail(data: rs)) {
Text(rs.title)
}
}
}
.navigationBarTitle("Search item")
.searchable(text: self.$search)
}
}
}

最新更新