您好我希望searchBar
始终可见,这就是我所拥有的:
searchController = UISearchController(searchResultsController: nil)
tableView.tableHeaderView = searchController.searchBar
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
有没有办法实现这个目标?
提前致谢
答案 0 :(得分:14)
怎么样?
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
searchController.searchBar.becomeFirstResponder()
}
看看Apple的示例(源代码):https://developer.apple.com/library/content/samplecode/TableSearch_UISearchController/Introduction/Intro.html
注意 - 从iOS 11开始,你应该使用UINavigationController而不是表头视图:
if #available(iOS 11.0, *) {
// For iOS 11 and later, we place the search bar in the navigation bar.
navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.searchController = searchController
// We want the search bar visible all the time.
navigationItem.hidesSearchBarWhenScrolling = false
} else {
// For iOS 10 and earlier, we place the search bar in the table view's header.
tableView.tableHeaderView = searchController.searchBar
}
答案 1 :(得分:3)
您可以尝试将其放在第一部分的标题中,如下所示:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return self.searchController.searchBar
}
我必须解决一个非常相似的情况,这就是我最终的结果:
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.delegate = self
searchController.searchBar.sizeToFit()
searchController.searchBar.tintColor = CARBONCOLOR
searchController.hidesNavigationBarDuringPresentation = false
self.definesPresentationContext = true
let search = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Search, target: self, action: "presentSearch")
self.navigationItem.setRightBarButtonItem(search, animated: true)
使用此代码显示searchController
func presentSearch()
{
self.navigationController!.presentViewController(searchController, animated: true, completion: nil)
}
这会在导航栏中放置一个barbutton,它会在导航栏上显示searchController。这不是我想要的,但结果是从tableview中的任何一点允许搜索的最简单方法。它还节省了一点空间,这是更好的。如果您没有导航栏,则可以自己出示。
答案 2 :(得分:1)
在viewDidLoad中,您可以在其中设置SearchController:
navigationItem.hidesSearchBarWhenScrolling = false
答案 3 :(得分:0)
UISearchController类应该在不使用时隐藏(即,当没有执行搜索时),因此我建议以其设计的方式使用它或以其他方式使用它。
在您的情况下,实施UISearchBar可能更合适,例如将其配置为(现有)UINavigationBar中的项目。这样,搜索栏将始终可见。
您是否已经拥有一个视图控制器,它在视图层次结构中包含导航栏?如果是这样,请尝试将搜索栏设置为项目,并使用UISearchController模式以其他方式实现搜索结果的显示。
答案 4 :(得分:0)
您在searchBar
的{{1}}中设置tableHeaderView
,默认行为是UITableView
滚动searchBar
,我担心你不能像你那样改变它。
但是你可以改变你的方式,你可以使用UITableView
并自己管理视图并将它放在层次结构视图中的UISearchDisplayController
之上,这两个教程可以帮到你很多关于如何实现它并理解它是如何工作的:
我希望这对你有所帮助。