我在导航控制器中实现了一个搜索栏,它工作正常但是没有调用取消按钮点击委托方法。请帮忙:
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
//This function is not being called
}
let searchBarCnt = UISearchController(searchResultsController: nil)
navigationItem.searchController = searchBarCnt
navigationItem.hidesSearchBarWhenScrolling = true
self.navigationController?.view.backgroundColor = UIColor.white
searchBarCnt.delegate = self
searchBarCnt.searchBar.delegate = self
答案 0 :(得分:3)
由于缺少definesPresentationContext
:
确定应为类型的演示文稿显示哪个父视图控制器的视图 UIModalPresentationCurrentContext。如果没有祖先视图控制器设置了此标志,则为演示者 将是根视图控制器。
你可以用这种方式启用这样的标志:
import UIKit
class ViewController: UIViewController, UISearchBarDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.searchController = UISearchController(searchResultsController: nil)
self.navigationItem.searchController?.searchBar.delegate = self
self.definesPresentationContext = true
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
print("searchBarCancelButtonClicked")
}
}
注意强>:
没有definesPresentationContext
,你没有真正触摸取消按钮(当你试图触摸它时),你只是忽略了上下文(你可能会注意到背景焦点中的“无声”故障),这样的
一个人在被解雇。
答案 1 :(得分:0)
当您单击显示在搜索栏委托方法旁边的“取消”按钮时,将不会被调用。
尝试单击键盘上的搜索按钮,并检查取消按钮委托方法是否被调用