UISearchController 取消按钮不可点击
UISearchController Cancel Button Not Clickable
其中有很多 questions/answers,但不幸的是 none 其中有效。
我有一个 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
}
}
我按如下方式实现所需的委托方法:
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 视图并在输入文本时成功重新加载它。此外,我可以在键盘上单击 "Search",它会调用 searchBarSearchButtonClicked
方法。
然而,尽管 Cancel
按钮可见(见上文),但似乎不可点击。因此,searchBarCancelButtonClicked
方法不会被调用。
请问我哪里做错了?
确保在声明委托后调用 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
}
}
其中有很多 questions/answers,但不幸的是 none 其中有效。
我有一个 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
}
}
我按如下方式实现所需的委托方法:
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 视图并在输入文本时成功重新加载它。此外,我可以在键盘上单击 "Search",它会调用 searchBarSearchButtonClicked
方法。
然而,尽管 Cancel
按钮可见(见上文),但似乎不可点击。因此,searchBarCancelButtonClicked
方法不会被调用。
请问我哪里做错了?
确保在声明委托后调用 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
}
}