Ios searchBarSearchButtonClicked不工作

Ios searchBarSearchButtonClicked不工作,ios,swift,uisearchbar,Ios,Swift,Uisearchbar,我已经在viewDidLoad方法中设置了委托,还检查了IB,以查看委托是否在使用control+drag时显示,并且它实际上显示为已连接。我也删除了它,在IB中添加了一个新的搜索栏,并将其重新连接。似乎没有什么能起作用。有什么建议吗 override func viewDidLoad() { self.searchBar.layer.zPosition = 1 self.searchBar.delegate = self } //this is never being cal

我已经在viewDidLoad方法中设置了委托,还检查了IB,以查看委托是否在使用control+drag时显示,并且它实际上显示为已连接。我也删除了它,在IB中添加了一个新的搜索栏,并将其重新连接。似乎没有什么能起作用。有什么建议吗

override func viewDidLoad() {
    self.searchBar.layer.zPosition = 1
    self.searchBar.delegate = self
}

//this is never being called, breakpoint never hits
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
    print("searchText \(searchText)")
}

//this is never being called, breakpoint never hits
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
    print("search button clicked")
    self.firebaseQuery()
}
多亏了reddit用户@Applish,我解决了这个问题

我没有在参数前面加下划线-_-


谢谢大家的帮助

您的自定义视图控制器类是否在Interface Builder中设置?即,在“标识检查器”选项卡上,确保在“自定义类”部分中设置了所需的UIViewController子类


此外,请尝试在viewDidLoad中设置断点。运行应用程序,如果断点未按预期命中,则有助于缩小问题的范围。

是否可能是您错误地设置了代理

在Interface Builder中,单击命令搜索栏,将代理拖动到情节提要中的黄色ViewController按钮以设置代理。 从viewDidLoad中删除self.searchBar.delegate=self

我也不知道您的viewController类是否正确地符合UISearchBarDelegate,我会将它添加到控制器的扩展中,并将所有与它相关的代码放在那里

 class ViewController: UIViewController{...}


 extension ViewController: UISearchBarDelegate {
     // implement all searchBar related methods here: 

    func searchBarButtonClicked(_ searchBar: UISearchBar) {
       //capture the string 
       if let input = searchBar.text {
        // do something with string.  
        print(input)


       }


 }

当我使用IB设置它时,它也有一个没有响应的问题。我最终使用代码而不是IB设置它,并且它工作了。试着这样做:

    class MySearchTableViewController: UITableViewController, UISearchResultsUpdating, UISearchBarDelegate {

        let searchController = UISearchController(searchResultsController: nil)

    override func viewDidLoad() {
        super.viewDidLoad()

        self.searchController.searchBar.autocapitalizationType = UITextAutocapitalizationType.none
        self.navigationItem.searchController = self.searchController

        //if this is set to true, the search bar hides when you scroll.
        self.navigationItem.hidesSearchBarWhenScrolling = false

        //this is so I'm told of changes to what's typed
        self.searchController.searchResultsUpdater = self

        self.searchController.searchBar.delegate = self
}

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {            
        //hopefully this gets called when you click Search button
}

    func updateSearchResults(for searchController: UISearchController) {
        //if you want to start searching on each keystroke, you implement this method. I'm going to wait until they click Search.
    }

请这样尝试:extension yourViewController:UISearchBarDelegate{func searchBarSearchButtonClicked_uSearchBar:UISearchBar{打印键盘搜索按钮被点击:searchBar.searchBar.resignFirstResponder}}@Sidharth Sharma,我刚刚尝试了你的代码,对我来说效果很好。我看不到任何问题。它对我仍然不起作用@Shivakumaryep它已经在身份检查器中设置好了。不幸的是,我使用的是viewDidLoad方法,而不是UISearchBarIt的其他委托方法。也删除了viewDidLoad中的委托调用,但它不起作用。我认为它们是相互关联的。用户只看到UISearchBar,但UISearchController是幕后所有搜索的控制者。我的VC看起来就像你的一样——顶部有一个UISearchBar,用户键入一个单词,点击enter,然后调用searchBarSearchButtonClicked。我绝对不是这方面的专家,但我遵循了本教程,并使其正常工作:[这似乎是在用结果更新表视图,而不是允许用户提交正确的查询?这只是在您愿意的情况下。在我的情况下,在调用searchBarSearchButtonClicked时,我使用self.searchController.searchBar.text属性检索他们键入的字符串。这是控制器唯一做的事情对我来说。从那时起,我在空格上分割字符串,这样我就知道他们搜索的关键字,然后我用这个字符串做一些事情。控制器不做任何额外的事情。