我的应用程序正常工作,因此我在 UICollectionViewController 内的可重用视图中有一个 UISearchController。当在搜索栏中点击时,我单击任何结果,它会触发通知以重新加载 collectionView 以反映更改。
lazy var searchController: UISearchController = {
let tableViewController = UITableViewController(style: .Plain)
tableViewController.tableView.dataSource = self
tableViewController.tableView.delegate = self
tableViewController.tableView.registerClass(StoreListCell.self, forCellReuseIdentifier: "MiniStoreCell")
let searchController = UISearchController(searchResultsController: tableViewController)
searchController.searchResultsUpdater = self
searchController.searchBar.frame = CGRect(x: 0, y: 0, width: CGRectGetWidth(self.collectionView.frame), height: 44)
return searchController
}()
override func viewDidLoad() {
super.viewDidLoad()
definesPresentationContext = true
collectionView.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "SearchView")
let layout = collectionView.collectionViewLayout as UICollectionViewFlowLayout
layout.headerReferenceSize = CGSize(width: CGRectGetWidth(collectionView.frame), height: 44)
token = RLMRealm.defaultRealm().addNotificationBlock({ [unowned self] (notification, realm) -> Void in
self.categories = Category.allObjects().sortedResultsUsingProperty("name", ascending: true)
self.collectionView.reloadData()
})
}
override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
let searchView = collectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionHeader, withReuseIdentifier: "SearchView", forIndexPath: indexPath) as UICollectionReusableView
searchView.addSubview(searchController.searchBar)
searchController.searchBar.sizeToFit()
return searchView
}
由于 reloadData 还会重新加载搜索栏所在的可重用视图,这会导致导航栏消失,让我卡在 searchresultsController
前
后