未调用搜索栏取消按钮委托

我在导航控制器中实现了一个搜索栏,它工作正常但是没有调用取消按钮点击委托方法。 请帮忙:

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 

函数委托未被调用,因为您缺少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 ,你并没有真正触摸取消按钮(当你试图触摸它时),你只是忽略了上下文(你可能会注意到背景焦点中的“无声”故障),就像弹出窗口被解雇一样。

当您单击搜索栏旁边出现的取消按钮时,将不会调用委托方法。

尝试单击键盘上的搜索按钮,检查是否调用了取消按钮委托方法