我在UISearchController
updateSearchResultsForSearchController
我正在使用NSPredicate
:
self.filteredChats.removeAll(keepCapacity: false)
let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
let array = (self.gruppenNamen as NSArray).filteredArrayUsingPredicate(searchPredicate)
self.filteredChats = array as! [String]
有没有办法存储每个已过滤元素的indexPath? 我需要知道,为了正确显示我的单元格,因为我也使用数组用于图像和其他数据。
答案 0 :(得分:1)
我们说你有gruppenNamen
和gruppenImages
。你想让它们保持同步。
我强烈建议您使用属性名称和属性图像创建自定义类。
由于您似乎不希望这样,您可以使用indexesOfObjectsPassingTest:
和objectsAtIndexes:
。我不使用Swift,所以我将在Objective-C中编码,但它应该很容易翻译。
NSIndexSet *indexes = [self.gruppenNamen indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
return [(NSString *)obj rangeOfString:searchController.searchBar.text options:NSCaseInsensitiveSearch].location != NSNotFound;
}];
self.filteredChat = [self. gruppenNamen objectsAtIndexes:indexes];
self.filteredImages = [self.gruppenImages objectsAtIndexes:indexes];
我使用rangeOfString:options
代替谓词的contains[c]
。你也可以在这里使用NSPredicate
。