У меня есть UITableViewController, которые используют простой результат поиска SearchBar. Я использую массив конфет с именем и категорией, и я использую эти категории в качестве параметров для рамки области моего SearchBar. У меня есть функция полезности для применения фильтра:UISearchDisplayController не перезагружает данные при поиске только по областям
func filterContentForSearchText(searchText: String, scope: String = "All") {
// Filter the array using the filter method
self.filteredCandies = self.candies.filter(){(candy: Candy) -> Bool in
let categoryMatch = (scope == "All") || (candy.category == scope)
let stringMatch = candy.name.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
return categoryMatch && (stringMatch != nil)
}
}
Я называю эту функцию в методе searchDisplayController:shouldReloadTableForSearchScope:
и в методе searchDisplayController:shouldReloadTableForSearchString:
.
Если я поместил текст в SearchBar, все будет работать, даже если я выберу область из панели видимости. Проблема в том, что когда я очищаю текст (или когда я выбираю область без текста), фильтр не применяется. С некоторой отладкой я увидел, что массив хорошо фильтруется при вызове tableView:cellForRowAtIndexPath:
, но tableView просто показывает все элементы, а не отфильтрованные.