在 Swift 中从 SearchBar 中选择单元格

Posted

技术标签:

【中文标题】在 Swift 中从 SearchBar 中选择单元格【英文标题】:Select Cell From SearchBar in Swift 【发布时间】:2020-08-01 21:48:24 【问题描述】:

我试图从搜索时提供的单元格中获取信息并将其带回之前的视图控制器。这是我的代码:

   //variables:
   var searching = false
   var cityArray = ["New York City, NY", "LA, CA"]
   var searchCity = [String()]
   
  //setup
  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
     if searching 
        return searchCity.count
     else 
      return cityArray.count
 
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
  let cell = tableView.dequeueReusableCell(withIdentifier: "CityTableViewCell", for: indexPath) as! 
  CityTableViewCell 
  if searching 
   cell.cityLabel.text = searchCity[indexPath.row]
   else 
  cell.cityLabel.text = cityArray[indexPath.row]
   
  return cell 
 



    //tells what do once selecting the tableviewcell
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    if searching 
     //This is the problem. I am telling to take the search city IndexPath.row
     currentCity = searchCity[indexPath.row]
     else 
     currentCity = cityArray[indexPath.row]
     
    //currentCity is then used to go back to prev. VC and tell it what city was selected
   if let presentingVC = presentingViewController as? DealsViewController 
        if presentingVC.city != self.currentCity 
            presentingVC.city = self.currentCity
            presentingVC.deleteAllDeals()
            presentingVC.noDeals = false
            presentingVC.cityOutlet.setTitle(self.currentCity,for: .normal)
        DispatchQueue.main.async 
                presentingVC.getDealInfo 
                presentingVC.DealsTableView.reloadData()
                presentingVC.DealsTableView.layoutIfNeeded()
                
            
        
        
    
    searchBar.text = currentCity
    searching = false
    tableView.deselectRow(at: indexPath, animated: true)
    self.dismiss(animated: true, completion: nil)
    searchBar.resignFirstResponder()
 

//searchBar

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) 
    searchCity = cityArray.filter($0.prefix(searchText.count) == searchText)
    searching = true
    reloadData()

很遗憾,如果处于搜索模式,返回的城市不会改变。它与之前的视图控制器相同。我希望从 searchCity 中获取确切的 indexpath.row。

谢谢!

【问题讨论】:

还有一种方法可以在搜索时使其同时区分小写和大写:例如“New York City, NY”与“new york city, ny”......只有确切的大小写才会搜索时显示? 【参考方案1】:

想通了:

    出现转录错误

    将其更改为小写: searchCity = cityArray.filter($0.lowercased().prefix(searchText.count) == searchText.lowercased())

谢谢!

【讨论】:

以上是关于在 Swift 中从 SearchBar 中选择单元格的主要内容,如果未能解决你的问题,请参考以下文章

当我在 Swift 中从音乐库中选择歌曲时,为啥我的应用程序会崩溃?

searchBar 与部分标题视图重叠尚未回答:需要在 Swift 3 中回答

Swift - 在自定义 TableViewController 中出现 SearchBar 问题

Swift 2.0 - UISearchBar 取消按钮不删除 searchBar 内容

在 Swift 中从 UITableView 中删除一行?

Swift:searchBar - 如何更改“取消”按钮标题