2017-09-26 40 views
0

我希望我的搜索栏能够通过非大小写字母来过滤tableView。目前,我已设置它,以便按区分大小写的词进行过滤,我不确定如何通过搜索栏中使用的字母填充tableView。Swift 3.0搜索栏按字母过滤(非单词)

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是否仅在单词完成或者过滤器功能不起作用时刷新。

回答

2

而是平等的比较,这是只返回上完全平等true,则使用contains相反,小写使其不区分敏感

nameList = sortedUserNames.filter({$0.lowercased().contains(searchBar.text.lowercased())}) 
0

这取决于你的,你要如何做搜索的选​​择,如果你想让表格包含提供的确切搜索字符串,那么“==”将为你提供最好的服务,但是如果你希望名称可以包含搜索字符串的任何字符/子字符串,那么“包含”将是你的选择。

nameList = sortedUserNames.filter({$0.lowercaseString == searchBar.text.lowercaseString}) 
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() 

} 
}