我希望我的搜索栏能够通过非区分大小写的字母过滤tableView。目前,我已将其设置为使用区分大小写的单词进行过滤,我不确定如何使用搜索栏中使用的字母填充tableView。
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if newMessageSearchBar.text == nil || newMessageSearchBar.text == "" {
isSearching = false
view.endEditing(true)
messagesTableView.reloadData()
} else {
isSearching = true
nameList = sortedUserNames.filter({$0 == searchBar.text})
messagesTableView.reloadData()
}
}
我的dataSource是sortedUserNames,我把它设置为nameList。我不确定只有在单词完成或过滤器功能不起作用时才刷新tableView。
答案 0 :(得分:3)
而不是相等的比较,只在完全相等时返回true,而是使用contains
,小写使其不区分大小写
nameList = sortedUserNames.filter({$0.lowercased().contains(searchBar.text.lowercased())})
答案 1 :(得分:0)
这取决于您选择的搜索方式,如果您希望表格包含提供的确切搜索字符串,那么" =="将为您提供最好的服务,但如果您希望该名称可能包含搜索字符串的任何字符/子字符串,那么"包含"将是你的选择。
nameList = sortedUserNames.filter({$0.lowercaseString == searchBar.text.lowercaseString})
答案 2 :(得分:0)
我尝试了这个,它实际上适合我。当您尝试稍后搜索资本时,对于小写字母,将显示特定字母的字母。
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchWordsBar.text == nil || searchWordsBar.text == "" {
isSearching = false
view.endEditing(true)
originalWordsTableView.reloadData()
} else {
isSearching = true
filteredWords = originalWords.filter { originalWords in return originalWords.lowercased().contains(searchText.lowercased())
}
originalWordsTableView.reloadData()
}
}