gpt4 book ai didi

ios - 无法将 UISearchController 搜索栏添加到导航栏中,委托(delegate)方法未被调用

转载 作者:行者123 更新时间:2023-11-28 05:44:13 32 4
gpt4 key购买 nike

我想实现一些非常简单的事情:导航栏中的搜索栏,以及一个在栏被激活时显示的取消按钮。

我正在使用 UISearchController,目前我有以下内容:

override func viewDidLoad() {
super.viewDidLoad()
...

let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.delegate = self
searchController.searchBar.delegate = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchBar.sizeToFit()
self.navigationItem.titleView = searchController.searchBar
self.definesPresentationContext = true
}

搜索栏显示。但是,如果我专注于它,则不会显示取消按钮,也不会调用任何委托(delegate)方法。也就是说,UISearchResultsUpdatingUISearchControllerDelegateUISearchBarDelegate 协议(protocol)中的任何方法都不会被调用,尽管我已经设置了 self 对所有这些做出回应。

如果我将以下行放入 viewDidLoad,委托(delegate)方法开始起作用:

self.navigationItem.searchController = searchController

但是,我无法将搜索栏放在导航栏内。它显示在导航栏下方。

我在 SO 中进行了广泛搜索,但似乎对我没有任何帮助。我可能在这里遗漏了一些明显的东西 - 我怎样才能让它发挥作用?谢谢!

最佳答案

只需将 UISearchController 定义为属性,然后一切正常。

我已经在下面的示例项目中进行了测试。

  class ViewControllerName: UIViewController{
let searchController = UISearchController(searchResultsController: nil)

override func viewDidLoad() {
super.viewDidLoad()
let search = UISearchController(searchResultsController: nil)
self.navigationItem.searchController = search
self.navigationItem.searchController!.searchBar.delegate = self
self.navigationItem.searchController!.searchResultsUpdater = self
self.navigationItem.searchController?.searchBar.showsCancelButton = true
}

func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
print("Called")
}

func updateSearchResults(for searchController: UISearchController) {
print("Called")
}
}

希望它对你有用。

关于ios - 无法将 UISearchController 搜索栏添加到导航栏中,委托(delegate)方法未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55508112/

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