Focus on the UISearchBar but the keyboard not appear
Solution 1
I was showing searchbar on textFieldDidBeginEditing:(UITextField *)textField delegate method.
Keyboard was not showing. So for that first resign textField as firstResponder. i.e.
[textField resignFirstResponder];
Then call method with delay
[self performSelector:@selector(callSearchBar) withObject:NULL afterDelay:0.2];
Where
-(void)callSearchBar{
[self.searchDisplayController setActive: YES animated: YES];
self.searchDisplayController.searchBar.hidden = NO;
[self.searchDisplayController.searchBar becomeFirstResponder];
}
It works
Solution 2
Use the UISearchBarDelegate and declare the searchBar in the header file like this ...
@interface mySearchScreen : UIViewController <UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate> {
UITableView *myTableView;
NSMutableArray *tableData;
UISearchBar *sBar;//search bar
and declare your search bar in loadView
- (void)loadView {
[super loadView];
sBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0,0,320,30)];
sBar.delegate = self;
[self.view addSubview:sBar];
myTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 31, 300, 400)];
myTableView.delegate = self;
myTableView.dataSource = self;
[self.view addSubview:myTableView];
tableData = [[NSMutableArray alloc]init];
}
and then use becomeFirstResponder on your search bar in viewDidAppear
- (void)viewDidAppear:(BOOL)animated {
//ensure the keyboard comes up from the start
[sBar becomeFirstResponder];
[super viewDidAppear:animated];
}
Solution 3
The sequence matter
[self.searchDisplayController setActive:YES animated:YES];
[self.searchDisplayController.searchBar becomeFirstResponder];
If no luck then check if delegate of the search display controller is linked. Also worth checking the tint colour of the search bar.
Solution 4
On the simulator
, make sure that you click on Toggle Software Keyboard
to use the keyboard of the simulator as you can see in the image.
Related videos on Youtube
Lorenzo
Updated on March 16, 2020Comments
-
Lorenzo over 4 years
I've read so many solution on how can i focus a searchbar to make keyboard appear when i open my search view, and all of that are like this
[searchBar becomeFirstResponder]; mine is [self.searchDisplayController.searchBar becomeFirstResponder]; but I tried both.
Now, I tried this, and I also added a
[self.searchDisplayController setActive:YES];
because I'm using a SearchDisplayController, but so far the best result i can have is to have the cursor on the searchbar, the uitableview with an overlay on it, but still no keyboard.
If I run the simulator I can type on the searchbar with my computer's keyboard, but on an iPhone I can't do anything.
If you want to give a look to my code: http://nopaste.info/39fcda4771.html the focus should be executed in viewDidLoad method
Thanks again.
-
yunas over 11 yearsshouldn't [super viewDidAppear:animated]; call first than [sBar becomeFirstResponder];
-
scottmrogowski about 11 yearsThis finally worked for me! Have an upvote. Any idea why you would have to do this
[self.searchDisplayController.searchBar becomeFirstResponder];
instead of[self.searchBar becomeFirstResponder];
? -
jweyrich almost 11 yearsThis works fine, but I'd recommend simply doing
[self callSearchBar]
inside theviewDidAppear:
method. We don't know reliably how much time the controller transition might take, so you might end up with a ugly effect and/or unexpected tableview artifacts if your delay is too short to focus thesearchBar
. +1 nevertheless :-) -
ricky.tribbia over 10 years@scottmrogowski You have to use
self.searchDisplayController.searchBar
because you have probably got theUISearchDisplayController
connected to yourUITableViewController
, so you haven't had a searchBar variable into yourUITableViewController" class, but you can get this reference through the
UISearchDisplayController` variable. -
c9s over 9 yearsworks for me, I call active search bar after
[super viewDidAppear:animated]