iOS11 SearchController在导航栏与范围按钮
iOS11 SearchController在导航栏与范围按钮
在iOS中11,你可以把一个UISearchController在导航栏用几行代码。
我在ViewController.swift中设置了一切。
func setupNavBar() {
navigationController?.navigationBar.prefersLargeTitles = true
let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = wordViewController
searchController.searchBar.scopeButtonTitles = ["French", "English"]
searchController.searchBar.delegate = wordViewController
navigationItem.searchController = searchController
// Make searchbar persistent
navigationItem.hidesSearchBarWhenScrolling = false
}
在我的委托中,搜索会正确触发并过滤。但是,如果我单击任何一个范围按钮,它们就会消失。此委托方法从未被调用。 (由范围过滤器是不实际尚未实现)
extension WordViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
if let searchText = searchBar.text {
print("Scoped changed: \(searchText)")
filteredWordList = wordList.filter({$0.contains(searchText)})
}
}
}
完整的源代码在GitHub上:
https://github.com/melling/ios_topics/tree/master/NavBarSearch https://github.com/melling/ios_topics/tree/master/NavBarSearch/NavBarSearch
尽量在setupNavBar()添加以下代码:
searchController.dimsBackgroundDuringPresentation = false
这有点奏效。然后它导致不能再点击背景的问题来解除焦点在搜索栏上。 – BananaNeil
我能够使用Artem的解决方案,
searchController.dimsBackgroundDuringPresentation = false
但我后来遇到了不能再点击背景的问题来关闭搜索栏的焦点。
为了解决这个问题,我创建了我自己的调光器uiview(屏幕尺寸,背景颜色为25%不透明度的黑色),并将其添加到当前呈现的屏幕的视图中,并监听轻击。当用户点击它,我淡出出来,并设置
searchController.active = false
你可以发布一个你的实现的例子吗? –
在您的视图控制器,你需要加入这一行
self.definesPresentationContext = YES;
这告诉UISearchController它需要使用演示背景下,由您的ViewController定义。
检查此链接了解详情:http://asciiwwdc.com/2014/sessions/228
你的文件与苹果的错误报告? – matt
是的,来源 – h4labs
你误认了发生了什么。范围栏按钮不会消失;整个搜索控制器界面正在被解雇。如果您想在导航栏中看到带范围按钮的示例,请告知我们。但总的来说,我有一种感觉,苹果希望你在结果表视图中使用分段控件(如果你愿意,我也可以向你展示一个例子)。 – matt