使用 UISearchBar 过滤数组
Posted
技术标签:
【中文标题】使用 UISearchBar 过滤数组【英文标题】:Filter Array with UISearchBar 【发布时间】:2017-08-03 01:02:36 【问题描述】:我目前正在使用以下代码来过滤数组并将结果呈现在我的 tableView 中。问题是,只有当搜索与确切的单词匹配时才会返回结果。如何更改我的数组过滤器以在我键入时搜索每个字符?
let data = ["Mango", "Grape", "Berry", "Orange", "Apple"]
var filteredData: [String] = []
filteredData = data.filter($0 == searchBar.text)
让“Mango”出现在我的 tableView 中的唯一方法是,我必须在搜索栏中输入 Mango,输入“Man”不会显示任何结果。
【问题讨论】:
使用 contains 代替 == developer.apple.com/documentation/swift/string/1643241-contains 【参考方案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
【讨论】:
以上是关于使用 UISearchBar 过滤数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift 3中过滤UISearchBar中的数组模型
Black Opaque UIToolbar 和 UISearchBar 看起来差别太大了