ios – 在UINavigationBar上呈现UISearchController时推送视图控制器

前端之家收集整理的这篇文章主要介绍了ios – 在UINavigationBar上呈现UISearchController时推送视图控制器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经实现了UISearchController,以便在点击搜索图标时显示在UINavigationBar之上.过滤表后,用户应该能够选择一个将推送新视图控制器的行.问题在于这样做,搜索控制器仍然显示在导航栏的上方.

我研究了这个,有人建议你应该将self.definedPresentationContext设置为true.当搜索显示在导航栏上方时,这不起作用.当您点击搜索图标时,键盘会出现,但搜索栏不会显示动画.

我找到的另一个选项是通过将active设置为false来关闭viewWillDisappear中的搜索控制器.这个解决方案的问题是它在推送过渡期间会动画化.当您向后导航时,搜索显然不再处于活动状态,因此用户已丢失搜索上下文并显示所有结果.

我想知道如何推送视图控制器,保持搜索活动,但不显示搜索界面超过下一个视图控制器.理想情况下,当推送新视图控制器时,搜索界面将被推离到左侧,并在刷回到搜索结果时返回.

我调整了Apple的UIKit Catalog示例代码,以显示不良行为.要重现问题,download this project,在iPhone上运行它,点击后退按钮,选择搜索,选择在导航栏上显示,点击搜索图标,键入搜索词,然后选择结果.请注意,搜索栏仍然可见.以下是SearchPresentOverNavigationBarViewController.swift中的代码

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)

    if searchController.active {
        //searchController.active = false //undesirably dismisses search,animates away during push,upon going back search is not active
    }
}

@IBAction func searchButtonClicked(button: UIBarButtonItem) {
    //self.definesPresentationContext = true //causes the search to not appear

    searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.dimsBackgroundDuringPresentation = false
    searchController.hidesNavigationBarDuringPresentation = false

    presentViewController(searchController,animated: true,completion: nil)
}

解决方法

我有点迟到了,但我最近发现自己处于类似情况,想分享我的经验.

因此,假设您已经展示了搜索界面,用户搜索字段中输入了一些内容,并向您展示了一些结果.在选择结果后,我将新视图控制器推送到原始导航控制器,即包含呈现搜索界面的视图控制器的导航控制器.当我这样做时,搜索界面被推到左侧,当你点击后退按钮时,搜索界面被带回来并保留其状态(查询和结果).

我应该提一下,在包含可搜索内容的控制器中,提供搜索界面的内容,我启用了演示文稿上下文.

此外,我的搜索栏集成在显示搜索内容的表格视图的标题视图中,因此我没有明确显示搜索界面 – 当用户点击搜索字段时,它会自动上升并推送导航栏离开屏幕.这是我能想到的唯一不同的设置.无论如何,希望这对你有所帮助.干杯!

猜你在找的iOS相关文章