Swift 3.0搜索栏按字母过滤(不是文字)

问题描述 投票:0回答:3

我希望我的搜索栏能够通过非区分大小写的字母过滤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。

ios swift tableview uisearchbar
3个回答
3
投票

而不是相等的比较,只在完全相等时返回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()

}
}
© www.soinside.com 2019 - 2024. All rights reserved.