SearchBar 过滤时忽略字符

Posted

技术标签:

【中文标题】SearchBar 过滤时忽略字符【英文标题】:SearchBar ignore character while filtering 【发布时间】:2017-11-27 07:04:35 【问题描述】:

我有一个填充了字符串类型数组的 tableView。字符串中的某些单词包含连字符 (-)。我知道我可以过滤一个 tableView 并让它根据需要删除这个字符。是否可以在搜索过程中忽略该字符但它仍然出现在 tableView 中?我有兴趣通过精确的单词搜索而不是 .contains 参数进行过滤。

例子:

数组 = [“一”、“二”、“三-”]

人搜索“t”:没有返回

人搜索“二”:搜索返回“二”

人搜索“三”:搜索返回“三-”

【问题讨论】:

如果在显示之前删除未使用的字符会怎样:remove-special-characters-from-string 【参考方案1】:

如果您想使用CONTAINS[c]MATCHES 进行过滤,这里有两种方法,这里是NSPredicate 的示例:

    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
    let array = (self.array as NSArray).filtered(using: searchPredicate)

现在使用 Contains 将根据包含您所说的关键字的字符串进行过滤,因此将返回 3- 因为用户搜索了三个:

人搜索“三”:搜索返回“三-”。

另一种方法是使用 MATCHES,这里是一个例子:

    let searchPredicate = NSPredicate(format: "SELF MATCHES %@", searchController.searchBar.text!)
    let array = (self.array as NSArray).filtered(using: searchPredicate)

如果我以你的例子为例,如果它与搜索键完全相同,则使用匹配项将返回结果:

人搜索“三”:搜索返回“”。

但是

人搜索“三-”:搜索返回“三-”。

现在,如果您想在显示时忽略该字符,则可以在 cellForRow 中找到它时对其进行修剪:

if string.contains("-")
     let trimmedString = string.replacingOccurrences(of: "-", with: "")

最后,我认为如果您在显示时使用包含修剪,那是您的最佳选择。

【讨论】:

以上是关于SearchBar 过滤时忽略字符的主要内容,如果未能解决你的问题,请参考以下文章

通过 searchBar 过滤 NSFetchedResultController 而不加载基本暂停?

有没有办法忽略映射字符过滤器?

如何制作正确过滤本地字符的 NSPredicate?

UISearchResultsUpdating 不基于 searchBar 文本过滤 collectionView

searchBar 过滤 tableViewCells didSelectItemAt indexPath 显示在 navigationBar Title

SearchBar 过滤和调整 UITableView 单元格?