【问题标题】:Filter Array with UISearchBar使用 UISearchBar 过滤数组
【发布时间】:2023-04-07 17:42:01
【问题描述】:
我目前正在使用以下代码来过滤数组并将结果呈现在我的 tableView 中。问题是,只有当搜索与确切的单词匹配时才会返回结果。如何更改我的数组过滤器以在我键入时搜索每个字符?
let data = ["Mango", "Grape", "Berry", "Orange", "Apple"]
var filteredData: [String] = []
filteredData = data.filter({$0 == searchBar.text})
让“Mango”出现在我的 tableView 中的唯一方法是,我必须在搜索栏中输入 Mango,输入“Man”不会显示任何结果。
【问题讨论】:
标签:
arrays
swift
uisearchbar
【解决方案1】:
Swift 5 解决方案:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filteredData = data
if searchText.isEmpty == false {
filteredData = data.filter({ $0.contains(searchText) })
}
tableView.reloadData()
}
这样可以确保当 searchBar 为空时,它会返回显示数组的所有数据,同时还会在每次更改文本时重新加载 tableView。
【解决方案2】:
试试这个:
filteredData = data.filter { $0.contains(_ other: searchBar.text) }
【解决方案3】:
这肯定会帮助你:
var 过滤数据:[字符串] = []
func searchBar(_ searchBar: UISearchBar, textDidChange searchText:String){
filterContentForSearchText(searchText: searchText)
}
func filterContentForSearchText(searchText: String, scope: String = "All") {
if searchText != "" {
filterData = data.filter {name in
return name.lowercased().contains(searchText.lowercased())
}
}else { self.filterData = self.data}
}