Ios searchBarSearchButtonClicked不工作
我已经在viewDidLoad方法中设置了委托,还检查了IB,以查看委托是否在使用control+drag时显示,并且它实际上显示为已连接。我也删除了它,在IB中添加了一个新的搜索栏,并将其重新连接。似乎没有什么能起作用。有什么建议吗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
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属性检索他们键入的字符串。这是控制器唯一做的事情对我来说。从那时起,我在空格上分割字符串,这样我就知道他们搜索的关键字,然后我用这个字符串做一些事情。控制器不做任何额外的事情。