首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >表视图中的搜索栏失败

表视图中的搜索栏失败
EN

Stack Overflow用户
提问于 2021-04-10 19:53:18
回答 1查看 23关注 0票数 0

我的搜索栏有问题。我试着用搜索栏在一个表视图中搜索,但是当我键入什么东西时,它什么也没有显示,在我删除所有试图搜索的餐馆之后,所有的餐馆都消失了。

这是我正在使用的代码。我只张贴必要的东西

代码语言:javascript
复制
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()
    }
    
}

这是变量:

代码语言:javascript
复制
struct Category {
    let title: String
    let photoKeyHome: String
}


  let datas: [Category] = []
  var filteredData: [Category]!
   
override func viewDidLoad() {
        super.viewDidLoad()
        
        filteredData = datas
}

这是我的桌景。也许我在这里做错了什么。

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
  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 在试图搜索之后

在我删除我搜索的内容之后

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-10 20:18:13

正如注释中提到的,datas从未被设置过。在getDatabaseRecords替换中

代码语言:javascript
复制
DispatchQueue.main.async {
   self.homeTableView.reloadData()
}

使用

代码语言:javascript
复制
DispatchQueue.main.async {
   self.datas = self.filteredData
   self.homeTableView.reloadData()
}

顺便说一句,您的textDidChange方法效率很低。代之以

代码语言:javascript
复制
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()
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67038634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档