表视图中的搜索栏失败
Posted
技术标签:
【中文标题】表视图中的搜索栏失败【英文标题】:Search bar in table view fails 【发布时间】:2021-04-10 19:53:18 【问题描述】:我的搜索栏有问题。我试图在带有搜索栏的表格视图中进行搜索,但是当我输入内容时它什么也没有显示,并且在我删除所有内容后,我尝试搜索的所有餐厅都消失了。
这是我正在使用的代码。我只会发布必要的内容
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()
TableView After tried to search
after I deleted what I searched
【问题讨论】:
datas
被定义为一个空数组。然后,将filteredData
设置为等于该空数组。除非您没有显示更多代码,否则它肯定是空的。
@jnpdx 我更新了我如何从 Firestore 获取数据。也许有什么东西
【参考方案1】:
如 cmets 中所述,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()
【讨论】:
以上是关于表视图中的搜索栏失败的主要内容,如果未能解决你的问题,请参考以下文章