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按钮时,该函数仍然没有被调用?