Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamically Changing Keyboard Type for a UISearchBar

I have an iPhone app that uses a UISearchBar and UISearchDisplayController. The search bar has three scope buttons. I would like the keyboard to be a numeric keypad when a particular scope button is selected, but be a default keyboard when any other scope button is selected.

I have implemented the UISearchBarDelegate selectedScopeButtonIndexDidChange:selectedScope method as follows:

- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope
{
    switch (selectedScope) {
        case DeviceIDScopeIndex:
            searchBar.keyboardType = UIKeyboardTypeNumberPad;
            break;
        default:
            searchBar.keyboardType = UIKeyboardTypeDefault;
            break;
    }
}

I know that the method gets called, and the right case gets triggered when the button in question is selected. But the onscreen keyboard doesn't change unless I tap the Cancel button to hide the keyboard, then tap the search field again to bring up the keyboard again.

Is there a way to get the keyboard to change itself while it's onscreen, or to programmatically hide it and then reshow it?

like image 436
Kristopher Johnson Avatar asked Oct 20 '09 12:10

Kristopher Johnson


1 Answers

If you're using iOS 3.2 or newer, you can call:

[searchBar reloadInputViews]

and it switches immediately without hackery. At least this works for me on a UITextField. (I mention this because the resign/become first responder trick didn't work exactly right for me, but reloadInputViews did.)

like image 88
Jeff Menter Avatar answered Oct 24 '22 22:10

Jeff Menter