gpt4 book ai didi

ios - 实现支持返回搜索结果的导航

转载 作者:行者123 更新时间:2023-11-29 01:57:07 24 4
gpt4 key购买 nike

我希望实现一种搜索,以便当用户按下搜索结果时,相关的 UIViewController 会被推送到搜索结果本身,从而允许用户按回键再次查看搜索结果.

我尝试简单地将 ViewController 推送到当前 ViewController 的 UINavigationController 上。这会导致 UIViewController 出现在搜索结果后面(取消搜索结果时可以看到)。

我还尝试对 UINavigationController 进行子类化并使其符合 UISearchResultsUpdating,将更新代理到 UIViewController。这会导致几乎正确的行为,但当 View Controller 被推送到 UINavigationController 上时,搜索栏仍然与导航栏一起,如下图所示。

我可以简单地执行一些 hacky 代码来根据 UINavigationController 的状态隐藏/显示搜索栏,但似乎必须存在一种更简洁的方法来完成此操作。

苹果自己在他们的笔记应用程序中做到了这一点,如果您进行搜索并按下结果,您将被带到相关的笔记,按下返回键将您带回到搜索结果。所以我想知道如何正确地复制这种行为。

enter image description here

最佳答案

后来我通过使负责显示搜索结果的 UIViewController 符合 UINavigationControllerDelegate 协议(protocol)(除了 UISearchResultsUpdating)。然后,updateSearchResultsForSearchController(searchController: UISearchController) 方法捕获并存储对作为参数传递的 UISearchController 的引用。然后,UINavigationControllerDelegate 代码中的 View 逻辑的杂耍使一切正常工作并看起来符合预期:

func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
if viewController == self {
searchController.searchBar.hidden = false
searchController.searchBar.becomeFirstResponder()
} else {
searchController.searchBar.hidden = true
searchController.searchBar.resignFirstResponder()
}
}

最后,如上面第三段所述,我创建了 UINavigationController 的子类,它被指定为搜索结果 Controller ,并委托(delegate)导航事件和 UISearchResultsUpdating 事件到 UIViewController

这当然可以按预期工作,到目前为止我还没有遇到任何错误。如果我下次查看此代码时找到更清晰的解决方案,将会发布更新(在 iOS 9 中可能更容易)。

关于ios - 实现支持返回搜索结果的导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30726091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com