Reputation: 791
I have search bar and cancel button, after search button tapped, it display the result but cancel button is inactive and i need to click twice to make it work and back to the initial result. How to make cancel button active after the search result appear?
here's my code
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchBar.endEditing(true)
searchBar.setShowsCancelButton(true, animated: true)
filterContentForSearchText(searchBar.text!, scope: "All")
print(searchBar.text)
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchBar.text = ""
searchBar.resignFirstResponder()
searchBar.setShowsCancelButton(false, animated: true)
database = dataUtuh
self.collectionView.reloadData()
}
I already implement UISearchBarDelegate
and searchBar.delegate = self
on my viewDidLoad
Upvotes: 4
Views: 5209
Reputation: 1296
Put the code to enable the cancel button in search bar's searchBarSearchButtonClicked
delegate method
In this way after the search bar will be clicked the cancel button will be still enabled.
so the complete code snippet would be
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchBar.endEditing(true)
searchBar.setShowsCancelButton(true, animated: true)
print(searchBar.text)
for view in searchBar.subviews {
for subview in view.subviews {
if let button = subview as? UIButton {
button.enabled = true
}
}
}
}
Happy coding...
Upvotes: 5
Reputation: 9923
In my experience if you do searchBar.endEditing(true)
then the cancel button is disabled, try adding this after that to see if its work, im also using it in my project:
func enableCancelButton (searchBar : UISearchBar) {
for view1 in searchBar.subviews {
for view2 in view1.subviews {
if view2.isKindOfClass(UIButton) {
let button = view2 as! UIButton
button.enabled = true
button.userInteractionEnabled = true
}
}
}
}
Upvotes: 4