I'm using the UISearchBar (but not the SearchDisplayController that's typically used in conjunction) and I'd like to dismiss the keyboard when you hit the 'X' button.
I've followed TomSwift's suggestion on getting called when the 'X' is tapped and that works great. But resigning first responder from the text field and also invoking in the UISearchBar instance, both with resignFirstResponder
, won't make the keyboard go away.
Is there a way to get rid of the keyboard when the user has tapped the X button?
Here's what I did to get the 'Clear' notify:
- (void)viewDidLoad:
{
for (UIView* v in searchBar.subviews)
{
if ( [v isKindOfClass: [UITextField class]] )
{
UITextField *tf = (UITextField *)v;
tf.delegate = self;
break;
}
}
}
Then I have my class setup to implement both UISearchBarDelegate and UITextFieldDelegate.
Having the class serve as the textfield delegate allows me to get this call:
- (BOOL)textFieldShouldClear:(UITextField *)textField
{
[textField resignFirstResponder];
[self.searchBar resignFirstResponder];
return YES;
}
I've tried everything I can think of. The last thing I'm trying is to find a way to issue the 'searchBarCancelButtonClicked' that UISearchDelegate will invoke on my Controller class but not I'm sure how I could do this since the UISearchBar doesn't seem to have any direct methods to invoke with this name.
Swift 2 version:
Credit to Maxhs for original answer : This is swift 2.2 version : Work like charm for me
Another point of view for clear text flow (similar to @TomSwift answer but clearer for me and less tricky). Also, I need to hide Cancel button after exit from the search bar, implement live search (after each symbol) and cover table before user complete search.
I used a combination of @radiospiel's answer and also the answer that @Tozar linked to:
Updated for SWIFT 3:
Suppose that the user has entered a string in searchfield and clicks x the following code works to hide keyboard when x is pressed
`
`
Toms answer got me thinking. If it is that the search bar is not yet the firstResponder when the user clicks the clear button we can just wait until it is, and then have it resignFirstResponder; i.e. along the lines of:
Works like a charm, and less hacky than Tom's IMHO.