使用 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 过滤 UISearchBar 的核心数据

如何在swift 3中过滤UISearchBar中的数组模型

Black Opaque UIToolbar 和 UISearchBar 看起来差别太大了

如何使用 UISearchBar Delegate 和一个数组?

iOS数据过滤错误

数组中字符串的 UISearchBar