【发布时间】:2017-11-20 10:39:54
【问题描述】:
在 iOS 11 中,您可以通过几行代码在 NavigationBar 中放置一个 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
【问题讨论】:
-
您是否向 Apple 提交了错误报告?
-
是的,有来源
-
您误会了正在发生的事情。范围栏按钮没有消失;整个搜索控制器界面被解除。如果您想在导航栏中查看带有范围按钮的示例,请告诉我。但是,总的来说,我感觉 Apple 希望您在结果表视图中使用分段控件(如果您愿意,我也可以向您展示一个示例)。
-
@matt 您能否展示一个使用导航栏设置范围按钮的示例?