3

我的应用程序正常工作,因此我在 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在此处输入图像描述

在此处输入图像描述

4

0 回答 0