在 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 问题