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

时间:2018-01-04 07:09:23

标签: ios swift

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

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

2 个答案:

答案 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)

当您单击显示在搜索栏委托方法旁边的“取消”按钮时,将不会被调用。

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