搜索栏在 iOS 中无法正常工作 [关闭]
Posted
技术标签:
【中文标题】搜索栏在 iOS 中无法正常工作 [关闭]【英文标题】:Searchbar doesn't work properly in iOS [closed] 【发布时间】:2016-10-08 18:46:27 【问题描述】:目前我正在我的项目中创建搜索功能,但它无法正常工作。目前,当我在 UISearchbar 中输入某些内容时,它确实会从搜索结果中改变,但它没有显示正确的搜索结果。这是因为数据中的单词之间有空格吗?因为当我使用单个单词时,它确实很完美。
数组和虚拟数据:
var exercises = [exercise]()
var filteredExercises = [exercise]()
// SOME DUMMY DATA FOR THE TABLEVIEW
let exercise1 = exercise(exerciseName: "Incline Bench Press")
let exercise2 = exercise(exerciseName: "Decline Bench Press")
let exercise3 = exercise(exerciseName: "Bench Press")
exercises.append(exercise1)
exercises.append(exercise2)
exercises.append(exercise3)
搜索栏功能:
// ***************** SEARCHBAR FUNCTIONS ************** //
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
if searchBar.text == nil || searchBar.text == ""
inSearchMode = false
tableView.reloadData()
else
inSearchMode = true
let lower = searchBar.text!.lowercased()
// each exercise in array is $0 and we taking the name value and the range of the inserted text is that contained in the name
filteredExercises = exercises.filter($0.exerciseName.range(of: lower) != nil)
tableView.reloadData()
显示在单元格中:
// ***************** TABLE DELEGATE FUNCTIONS ******************* //
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
if let cell = tableView.dequeueReusableCell(withIdentifier: "exerciseCell", for: indexPath) as? exerciseCell
// let exercise = exercises[indexPath.row]
let exer: exercise!
if inSearchMode
print(filteredExercises)
exer = filteredExercises[indexPath.row]
cell.updateUI(exercise: exer)
else
exer = exercises[indexPath.row]
cell.updateUI(exercise: exer)
// cell.updateUI(exercise: exercise)
return cell
else
return UITableViewCell()
希望有人看到问题。
【问题讨论】:
【参考方案1】:问题是你在说:
let lower = searchBar.text!.lowercased()
但是exercises
元素都是标题格式的:
let exercise1 = exercise(exerciseName: "Incline Bench Press")
let exercise2 = exercise(exerciseName: "Decline Bench Press")
let exercise3 = exercise(exerciseName: "Bench Press")
...所以lower
永远无法匹配exercises
中的任何内容。
【讨论】:
omg...我现在感觉很傻......我真傻哈哈 当我选择一行时,它会变成蓝色,我可以选择多行,但是当我在搜索并选择并返回时,它不会保存选定的行。我是否必须创建一个新的 var 才能在搜索模式下存储选定的行?/【参考方案2】:您比较降低和未降低的字符串。改为
filteredExercises = exercises.filter($0.exerciseName.lowercased().range(of: lower) != nil)
【讨论】:
以上是关于搜索栏在 iOS 中无法正常工作 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
网站菜单栏在移动浏览器中正常工作时无法与 WebView android 一起使用