【问题标题】:Pushing view controller when presenting UISearchController over UINavigationBar在 UINavigationBar 上呈现 UISearchController 时推送视图控制器
【发布时间】:2016-04-29 17:11:33
【问题描述】:

我已经实现了UISearchController,以便在点击搜索图标时它出现在UINavigationBar 之上。过滤表格后,用户应该能够选择将推送新视图控制器的行。问题在于这样做时,搜索控制器仍显示在导航栏上方。

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

我发现的另一个选项是通过将active 设置为false 来关闭viewWillDisappear 中的搜索控制器。这个解决方案的问题是它在推送过渡期间动画消失了。当您返回时,搜索显然不再有效,因此用户丢失了搜索上下文并显示了所有结果。

我想知道如何推送视图控制器,保持搜索处于活动状态,但不显示下一个视图控制器上方的搜索界面。理想情况下,搜索界面会在新的视图控制器被推送时被推向左侧,并在滑回搜索结果时返回。

我已经调整了 Apple 的 UIKit 目录示例代码以显示不受欢迎的行为。要重现该问题,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 uinavigationbar uisearchcontroller


    【解决方案1】:

    我参加演出有点晚了,但我最近发现自己处于类似情况并想分享我的经验。

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

    我应该提到,在包含可搜索内容的控制器中,即呈现搜索界面的控制器中,我启用了呈现上下文。

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

    【讨论】:

    • 嗨卢波!在搜索结果表视图上按下结果后,如何准确推送详细视图控制器?您使用委托或其他东西将它传递给根导航vc?
    猜你喜欢
    • 1970-01-01
    • 2019-03-28
    • 2011-01-15
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多