2017-09-26 65 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() 

} 
}