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
你的文件与苹果的错误报告? – matt
是的,来源 – h4labs
你误认了发生了什么。范围栏按钮不会消失;整个搜索控制器界面正在被解雇。如果您想在导航栏中看到带范围按钮的示例,请告知我们。但总的来说,我有一种感觉,苹果希望你在结果表视图中使用分段控件(如果你愿意,我也可以向你展示一个例子)。 – matt