Ios UISearchController可以';不要将委托设置为self

Ios UISearchController可以';不要将委托设置为self,ios,uiviewcontroller,swift3,uisearchcontroller,Ios,Uiviewcontroller,Swift3,Uisearchcontroller,我正在尝试使用swift3使UISearchController在我的导航栏中工作 我现在有它,所以右上角有一个搜索图标。单击图标时,它将显示UISearchController 问题是,当我尝试执行searchController.delegate=self时,会出现一个错误 无法将“ParentViewController”类型的值分配给“UISearchControllerDelegate”类型 我假设,由于我无法设置委托,所有操作都没有链接,但我不明白为什么它不允许我 这是我想要的代码。

我正在尝试使用
swift3使
UISearchController
在我的导航栏中工作

我现在有它,所以右上角有一个搜索图标。单击图标时,它将显示
UISearchController

问题是,当我尝试执行
searchController.delegate=self
时,会出现一个错误

无法将“ParentViewController”类型的值分配给“UISearchControllerDelegate”类型

我假设,由于我无法设置委托,所有操作都没有链接,但我不明白为什么它不允许我

这是我想要的代码。我是否执行了错误的协议,只是没有看到它,或者完全遗漏了什么

class ParentViewController: ButtonBarPagerTabStripViewController, UISearchResultsUpdating, UISearchBarDelegate {

var searchBarButtonItem: UIBarButtonItem?

override func viewDidLoad() {
    searchBarButtonItem = navigationItem.rightBarButtonItem
    super.viewDidLoad()
}

func updateSearchResults(for searchController: UISearchController) {
    print("update search results")
}

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
    print("search cancelled")
}

func filterContentForSearchText(searchText: String, scope: String = "All") {
    print("Filter: " + searchText)
}


@IBAction func startSearchAction(sender: UIBarButtonItem) {
    print("Clicked")

    let searchController = UISearchController(searchResultsController: nil)

    searchController.delegate = self
    searchController.searchResultsUpdater = self
    searchController.searchBar.delegate = self
    searchController.hidesNavigationBarDuringPresentation = false
    searchController.searchBar.showsCancelButton = true
    searchController.dimsBackgroundDuringPresentation = true

    self.navigationItem.titleView = searchController.searchBar

    definesPresentationContext = true

    navigationItem.setRightBarButton(nil, animated: true)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

您的类需要符合
UISearchControllerDelegate
-将其添加到类定义中的协议列表中,或通过extensionSweet添加,以解决seachController.delegate=self问题。但是,没有一项行动仍然在发生??我认为一旦协议正确,它就能够达到这些目标?具体行动是什么?我在上面的代码中没有看到任何
UISearchControllerDelegate
函数。searchBarCancelButtonClick是UISearchBarDelegate.searchBar的一部分,它也在上面的代码中设置,但我最初认为没有任何功能,因为没有设置主delgate。实际上,我在UISeachControllerDelgate中没有看到取消操作,只有UISearchBarDelegate.SearchBar是的,很抱歉,您最初的问题是关于
UISearchController
,而不是搜索栏,所以我感到困惑。所以当你点击cancel按钮时,该函数仍然没有被调用?