表视图中的搜索栏失败



我的搜索栏有问题。我试着用搜索栏在表格视图中搜索,但当我输入一些内容时,它什么都不显示,在我删除了所有内容后,我试着搜索所有消失的餐厅。

这是我正在使用的代码。我只发布必要的

extension HomeViewController: UISearchBarDelegate{
//MARK: Search bar

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

filteredData = []
if searchText == "" {

filteredData = datas
}
else {

for restaurante in datas{

if restaurante.title.lowercased().contains(searchText.lowercased())
{

filteredData.append(restaurante)
}

}
}
self.homeTableView.reloadData()
}

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { // Dispare tastatura cand apasam pe search
searchBar.resignFirstResponder()
}

}


这是变量:

struct Category {
let title: String
let photoKeyHome: String
}

let datas: [Category] = []
var filteredData: [Category]!

override func viewDidLoad() {
super.viewDidLoad()

filteredData = datas
}


这是我的桌子视图。也许我在这里做错了什么。

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredData.count

}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = homeTableView.dequeueReusableCell(withIdentifier: "homeTableViewCell", for: indexPath) as! homeTableViewCell
let restaurant = filteredData[indexPath.row]

let storageRef = Storage.storage().reference()
let photoRef = storageRef.child(restaurant.photoKeyHome)



cell.myLabel.text = restaurant.title
cell.myImage.sd_setImage(with: photoRef)

对于数据,我使用Firestore和firebase存储。这就是我从Firestore获取数据的方式。

func getDatabaseRecords() {

let db = Firestore.firestore()
//  Empty the array
filteredData = []

db.collection("HomeTableViewRestuarants").getDocuments { (snapshot, error) in
if let error = error {
print(error)
return
} else {
for document in snapshot!.documents {
let data = document.data()
let newEntry = Category(
title: data["title"] as! String,
photoKeyHome: data["photoKeyHome"] as! String

)




self.filteredData
.append(newEntry)
}
}
DispatchQueue.main.async {
self.homeTableView.reloadData()
}
}
}

表格视图尝试搜索后

在我删除了我搜索的之后

如注释中所述,从未设置datas。在getDatabaseRecords中替换

DispatchQueue.main.async {
self.homeTableView.reloadData()
}

带有

DispatchQueue.main.async {
self.datas = self.filteredData
self.homeTableView.reloadData()
}

顺便说一句,你的textDidChange方法效率很低。更换为

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {        
if searchText.isEmpty {
filteredData = datas
} else {
filteredData = datas.filter{ $0.title.range(of: searchText, options: .caseInsensitive) != nil  }
}
self.homeTableView.reloadData()
}

最新更新