Swift 4:在选择UISearchBar时推送TableViewController或CollectionViewController的建议

时间:2018-02-26 03:53:10

标签: ios swift uicollectionview push uisearchbar

我有一个collectionViewController,其中包含一个包含searchBar的节头。 (例如,searchBar嵌套在节头内)

我想提出另一个collectionViewController UPON选择出现的searchBar并在searchBar下停止。我想在您键入搜索时使用此newVC显示更新结果。

这就是我想要的样子: Here is the image

我的第一个方法是复制整个collectionView外观(创建一个replicaCollectionView)并推送replicaCollectionView,只需更改副本collectionView单元格的外观,看起来像弹出的唯一东西是searchBar和标题根本不会改变。(它实际上看起来很不错,它看起来像是在它下面弹出一个新的collectionView)

在我的自定义collectionViewHeader中,我调用一个完成块,以便我可以从我的viewController调用该函数,我的代码如下所示:

class HomeControllerHeader: UICollectionViewCell, UISearchBarDelegate {
...
func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {

    completion?()
    return true
}
}

并在我的HomeViewController中:

override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerId, for: indexPath) as! HomeControllerHeader

    header.completion = {
        //pull up tableView/collectionViewController up to searchBar
    }
    return header
}

我遇到的一个问题是每次我在replicaCollectionViewController上按下取消时,它会弹出replicaCollectionViewController并闪烁,并认为仍然选择了searchBar并立即再次调用完成块并重新推送newVC 。这导致永远不会摆脱副本collectionViewController(例如newVC)

我试着让我的生活关闭searchBar.endEditting = true,但它总是会在endEditting代码运行之前将replicaCollectionViewController重新打开。

我可以告诉前一个视图控制器(originalCollectionView)在viewDidAppear中调用searchBar.endEditting(true)但它会在viewDidAppear之前执行pop并立即返回到replicaVC

感谢您的帮助,我知道有更好的方法可以做到这一点......

0 个答案:

没有答案