使用UISearchBar过滤数组

3

目前我正在使用以下代码来过滤数组并在tableView中展示结果。问题是只有当搜索匹配完整的单词时,它才会返回结果。如何更改我的数组过滤器以在我输入每个字符时搜索?

let data = ["Mango", "Grape", "Berry", "Orange", "Apple"]

var filteredData: [String] = []

filteredData = data.filter({$0 == searchBar.text})

我只有在搜索栏中输入"Mango"才能在我的tableView上看到"Mango",而输入"Man"则不会显示任何结果。


1
使用 contains 替代 ==,请参阅:https://developer.apple.com/documentation/swift/string/1643241-contains - koropok
3个回答

7
Swift 5解决方案:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    filteredData = data

    if searchText.isEmpty == false {
        filteredData = data.filter({ $0.contains(searchText) })
    }

    tableView.reloadData()
}

这确保了当搜索栏为空时,它会返回显示所有数组数据,同时每次更改文本都会重新加载tableView。

3

试试这个:

filteredData  = data.filter { $0.contains(_ other: searchBar.text) }

0
这肯定会帮到你:
var filteredData: [String] = []
 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}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接