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 而不加载基本暂停?
UISearchResultsUpdating 不基于 searchBar 文本过滤 collectionView
searchBar 过滤 tableViewCells didSelectItemAt indexPath 显示在 navigationBar Title