我希望在UISearchBar
上实施tableView
。
我的代码(在viewDidLoad中):
self.searchController = UISearchController(searchResultsController: nil)
self.searchController.searchResultsUpdater = self
self.searchController.delegate = self
self.searchController.searchBar.delegate = self
self.searchController.searchBar.autocapitalizationType = .None
self.searchController.searchBar.autocorrectionType = .No
self.searchController.hidesNavigationBarDuringPresentation = false
self.searchController.dimsBackgroundDuringPresentation = false
self.tableView.tableHeaderView = self.searchController.searchBar
当我点击searchBar
时,这一个移至顶部,就像它想要隐藏navigationBar
:
我在很多帖子上搜索了答案,但没有任何效果。我想禁用此动画,以免searchBar移动。
答案 0 :(得分:23)
您应该可以通过设置:
来阻止这种情况self.searchController.hidesNavigationBarDuringPresentation = false
答案 1 :(得分:5)
您可以将UISearchController
视为在开始搜索时以模态方式呈现。如果你有一个通常的UINavigationController
设置,这可以正常工作,但是在像你这样的更“自定义”的用户界面中,你可能会遇到诸如搜索控制器附加到错误视图等问题。
我建议你不要在你的情况下使用UISearchController
并使用单独的UISearchBar
初始化你的界面的其余部分(可能在故事板中?),然后手动进行搜索。如果您无法简单地过滤内容,请实施UISearchBarDelegate
并为搜索结果添加自己的UITableView
。
虽然看起来你有一个tableView
var - 你可以简单地添加另一个属性,类似于你用作UITableViewDataSource
的属性,并在那里存储过滤的数据。因此,只要您在UISearchBar
中拥有某些内容,就可以在重新加载表格视图数据时使用过滤的数据源。例如:
var data: [String]
var filteredData: [String]
然后在filteredData
:
UITableViewDataSource
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredData.count
}
...
然后在UISearchBarDelegate
:
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
// Filter the data you have. For instance:
filteredData = data.filter({$0.rangeOfString(searchText).location != NSNotFound})
tableView.reloadData()
}