2014-11-07 2 views
0

У меня есть 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 просто показывает все элементы, а не отфильтрованные.

ответ

1

Функцией UISearchDisplayController является отображение только searchResultsTableView, когда в строке поиска есть текст. Лучший способ обойти это, который я нашел, - создать собственный сегментированный контроллер, который будет использоваться в качестве панели видимости и фильтровать фактический источник данных для вашего представления в виде таблицы по областям, а затем фильтровать его по поисковому тексту при вводе строки поиска.

Извините!

0

Я выполнил это, перезагрузив табличное представление из метода делегата.

func searchBar(searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) { 
    println("Scope Changed") 
    updateSearchResultsForSearchController(searchController) 
} 

Этих последняя функция должна содержать код для сброса настроек фильтра/переделки вашего массива/извлечения всех объектов из CoreData (если это то, что вы делаете) и перезагрузить свой Tableview.

Смежные вопросы