【发布时间】:2020-02-25 22:18:56
【问题描述】:
我已经为searchBar 实现了代码,如果我搜索一个人的名字或姓氏,它就可以工作。例如,如果我想搜索 Kate Bell,如果我写“Kate”,则搜索有效,如果我写“Bell”,则搜索有效。但如果我写“Kate B”,搜索结果就会消失。
这是我的代码:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.count == 0 {
isFiltered = false
tableViewOutlet.reloadData()
}else {
isFiltered = true
searchInternalArray = contactsInternalArray.filter({ object -> Bool in
guard let text = searchBar.text else {return false}
return object.firstName.lowercased().contains(text.lowercased().trimmingCharacters(in: .whitespacesAndNewlines)) || object.lastName.lowercased().contains(text.lowercased().trimmingCharacters(in: .whitespacesAndNewlines))
})
searchArrayGroups = sectionsArrayGroups.filter({ object -> Bool in
guard let text = searchBar.text else {return false}
return object.firstName.lowercased().contains(text.lowercased().trimmingCharacters(in: .whitespacesAndNewlines)) || object.lastName.lowercased().contains(text.lowercased().trimmingCharacters(in: .whitespacesAndNewlines))
})
searchArraySAEs = sectionsArraySAEs.filter ({ object -> Bool in
guard let text = searchBar.text else {return false}
return object.firstName.lowercased().contains(text.lowercased().trimmingCharacters(in: .whitespacesAndNewlines)) || object.lastName.lowercased().contains(text.lowercased().trimmingCharacters(in: .whitespacesAndNewlines))
})
tableView.reloadData()
}
我喜欢这个SOHow to search by both first name and last name
它在objective-c 中,我无法将它实现到我自己的代码中。我试过这样的事情:
searchInternalArray = contactsInternalArray.filter({ object -> Bool in
guard let text = searchBar.text?.range(of: object.firstName + object.lastName) else {return false}
return object.firstName.lowercased().contains(text.lowercased().trimmingCharacters(in: .whitespacesAndNewlines)) || object.lastName.lowercased().contains(text.lowercased().trimmingCharacters(in: .whitespacesAndNewlines))
})
这显然不是应该如何实现的。
编辑
不认为它是相关的,但也许它是:我正在过滤多个arrays,因为我有来自三个不同来源的数据到tableView。整个searchBar 代码如上所示。已更新。
【问题讨论】:
-
contactsInternalArray的类型是什么? -
如果您键入“Kate B”,则链接的答案不会找到“Kate Bell”。如果你搜索“B Kate”呢?它应该找到“凯特贝尔”吗?
-
@Dávid Pásztor
var contactsInternalArray: [InternalContact]。该类允许访问NSString firstName和NSString lastName等。 -
@Larme 啊,我的错。但是,是的,搜索 B Kate 也应该给出结果 Kate Bell。那会很好:)
标签: swift uitableview filter uisearchbar