对此有很多问题/答案,但不幸的是它们都不起作用。
我有一个 UICollectionViewController
的子类,我希望它的 collectionView
项可被搜索。因此,我使用 UISearchController
但处理 self
中过滤的 collectionView
项,因此将 searchResultsController
设置为 nil。
class CollectionViewController: UICollectionViewController {
var searchController: UISearchController!
override func viewDidLoad() {
super.viewDidLoad()
self.becomeFirstResponder()
searchController = UISearchController(searchResultsController: nil)
searchController.delegate = self
searchController.searchBar.delegate = self
searchController.searchBar.isUserInteractionEnabled = true
navigationItem.searchController = searchController
}
}
我实现所需的委托(delegate)方法如下:
extension CollectionViewController:: UISearchControllerDelegate {
}
extension CollectionViewController:: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
collectionView?.reloadData()
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
print("searchBarCancelButtonClicked")
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
print("searchBarSearchButtonClicked")
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
print("searchBarTextDidEndEditing")
collectionView?.reloadData()
}
}
我可以在搜索栏中输入文本,过滤我的 Collection View 并在输入文本时成功重新加载它。此外,我可以单击键盘上的“搜索”,这会调用 searchBarSearchButtonClicked
方法。
然而,虽然Cancel
按钮是可见的(见上文),但它似乎不可点击。因此,searchBarCancelButtonClicked
方法不会被调用。
请问我在这里做错了什么?
最佳答案
请确保在声明委托(delegate)后调用 definesPresentationContext = true
class CollectionViewController: UICollectionViewController {
var searchController: UISearchController!
override func viewDidLoad() {
super.viewDidLoad()
self.becomeFirstResponder()
searchController = UISearchController(searchResultsController: nil)
searchController.delegate = self
searchController.searchBar.delegate = self
self.definesPresentationContext = true . // ADD
searchController.searchBar.isUserInteractionEnabled = true
navigationItem.searchController = searchController
}
}
关于ios - UISearchController 取消按钮不可点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50108933/