【发布时间】:2019-04-04 04:54:30
【问题描述】:
我想实现一些非常简单的东西:导航栏中的搜索栏,带有一个取消按钮,当栏被激活时显示。
我正在使用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
}
搜索栏显示。但是,如果我专注于它,则不会显示“取消”按钮,也不会调用任何委托方法。也就是说,不会调用UISearchResultsUpdating、UISearchControllerDelegate 或UISearchBarDelegate 协议中的任何方法,尽管我已将self 设置为响应所有这些方法。
如果我将以下行放入viewDidLoad,则委托方法开始起作用:
self.navigationItem.searchController = searchController
但是,我不能将搜索栏放在导航栏中。它显示在导航栏下方。
我在 SO 中进行了广泛的搜索,但似乎没有什么对我有用。我可能在这里遗漏了一些明显的东西 - 我怎样才能让它工作?谢谢!
【问题讨论】:
-
确保您在课堂上扩展了所需的代表。是的,搜索栏显示在导航栏下方,但它在导航栏内......就像原生设置应用程序一样。
-
@dahiya_boy 谢谢我确实扩展了代表。是的,从技术上讲,它在导航栏内——我希望它看起来像 Instagram 或 Twitter,即它是一排(44pt),只有搜索栏。
-
请添加您预期的屏幕图像以及您现在得到的内容..
-
我想要类似于stackoverflow.com/questions/26726520/… 中的内容。但我的主要问题是没有触发任何委托方法。
标签: ios swift uisearchbar uisearchcontroller uinavigationitem