I have a UIViewController with a UISearchBar. I have replaced the Search Button by a Done button.
However, when one taps on the searchbar, the Done button is initially disabled. This occurs until one enters any character.
What I want to do is to have this Done button always enabled, such that if i tap on it i can inmediately dismiss the keyboard.
Any help? it would be highly appreciated.
I have on my UIViewController
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
return YES;
}
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[searchBar resignFirstResponder];
}
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if (searchBar.text.length == 0)
{
//[self fixOrientation];
[searchBar resignFirstResponder];
}
else
{
NSLog(@"typed");
}
}
-(void)searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar
{
NSLog(@"began"); // this executes as soon as i tap on the searchbar, so I'm guessing this is the place to put whatever solution is available
}
A simplest way and tricky is just put a blank when beginning editing search
The accepted answer doesn't seem to work anymore, so I made my own category that does seem to work:
Extension for Swift:
Usage:
You can get around this by looping around the subviews in the UISearchBar until you find the text field. Its then just a matter of setting "enablesReturnKeyAutomatically" to NO. Incidentally the following code also is useful for setting the keyboard type.
Nowadays
UISearchBar
conforms toUITextInputTraits
. You can simply set:WARNING: While this compiles for iOS 7.0, it will crash at runtime. It only works for >=7.1.
The docs are not clear on this one, as only since 7.1, the
UISearchBar
implements theUITextInputTraits
protocol, but it is not noted since which iOS version the protocol is adopted.Based on the Maps app, for example, it seems the pattern should be to have a cancel button near the textfield to get rid of the keyboard. With that said, one suggestion might be to have a custom
UIButton
placed right in that corner that looks just like the Done button.Kind of a hacky solution...
Hope this helps!