我有一个UICollectionView,我正在尝试使其中的搜索栏起作用。我已经出现了显示条,但是我还没有弄清楚在哪里调用我创建的函数,感觉有点愚蠢(花了几个小时,可能会很循环)。我目前正在使用可扩散数据源和NSFetchedResultsController尝试执行搜索。这是我的代码:
我的函数建立我的fetchedResultsController
并将其放置在viewDidLoad
中:
func setupFetchedResultsController() {
let request = NPCData.createfetchRequest()
request.fetchBatchSize = 30
if !currentSearchText.isEmpty {
request.predicate = NSPredicate(format: "title CONTAINS[c] %@ OR body CONTAINS[c] %@", currentSearchText, currentSearchText)
}
let sort = NSSortDescriptor (key: "title", ascending: true)
request.sortDescriptors = [sort]
fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: container.viewContext, sectionNameKeyPath: nil, cacheName: nil)
fetchedResultsController.delegate = self
do {
try fetchedResultsController.performFetch()
setupSnapshot()
} catch {
print ("Fetch failed")
}
}
我的代码建立了我的搜索栏和搜索控制器:
private func setupSearchController() {
let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search"
navigationItem.searchController = searchController
}
func updateSearchResults(for searchController: UISearchController) {
guard let text = searchController.searchBar.text else { return }
currentSearchText = text
setupFetchedResultsController()
}
我还在UICollectionView类的顶部放置了一个变量var currentSearchText = ""
,该类遵循NSFetchedResultsControllerDelegate, UISearchResultsUpdating
协议。
我正在setupFetchedResultsController()
中呼叫setupSearchController()
和viewDidLoad
。
我在这里想念什么?搜索栏会出现,但是我搜索的任何内容都不会做任何事情,我希望它可以更改我的收藏夹视图,使其仅显示我正在搜索的结果(如果我搜索“ Sportscar”一词,那么它应该仅显示显示“ Sportscar”一词的单元格,也不区分大小写。
答案 0 :(得分:0)
从UISearchBar委托方法调用更新方法
func searchBar(_ searchBar: UISearchBar,
textDidChange searchText: String)
{
//search in database using SearchText and update your view accordingly
}
不要忘记将UISearchBar实例的委托设置为self。
希望有帮助。