坚持通过FetchedResultsController,Diffable Data Sources和CollectionView添加搜索

时间:2019-12-11 05:12:18

标签: ios swift xcode

我有一个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”一词的单元格,也不区分大小写。

1 个答案:

答案 0 :(得分:0)

从UISearchBar委托方法调用更新方法

    func searchBar(_ searchBar: UISearchBar, 
              textDidChange searchText: String)
{
   //search in database using SearchText and update your view accordingly

}

不要忘记将UISearchBar实例的委托设置为self。

希望有帮助。