动态更改UISearchBar的键盘类型

我有一个使用UISearchBarUISearchDisplayController的iPhone应用程序。 搜索栏有三个范围按钮。 当选择特定的示波器按钮时,我希望键盘是一个数字小键盘,但是当选择任何其他示波器按钮时,该键盘就是默认的键盘。

我已经实现了UISearchBarDelegate selectedScopeButtonIndexDidChange:selectedScope方法,如下所示:

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

我知道该方法被调用,并且在选择了该问题的按钮时触发了正确的案例。 但屏幕键盘不会改变,除非我点击取消按钮隐藏键盘,然后再次点击搜索栏再次调出键盘。

有没有办法让键盘在屏幕上改变自己,或者以编程方式隐藏键盘然后重新显示它?


如果您使用的是iOS 3.2或更新版本,则可以致电:

[searchBar reloadInputViews]

并且它可以立即切换而不会惹人讨厌。 至少这在我的UITextField上工作。 (我提到这一点是因为辞职/成为第一响应者技巧并不适合我,但reloadInputViews确实如此。)


即使这是一种破解,这对我来说很有效:

- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope {


    switch (selectedScope) {
    case 0:
       searchBar.keyboardType = UIKeyboardTypeNumberPad;
        break;
   default:
        searchBar.keyboardType = UIKeyboardTypeDefault;
        break;


    // Hack: force ui to reflect changed keyboard type
    [searchBar resignFirstResponder];
    [searchBar becomeFirstResponder];

}

[searchBar reloadInputViews] 

[searchBar resignFirstResponder];
[searchBar becomeFirstResponder];

既可以工作,但第二种方法有更多的副作用,改变firstResponder,可以触发键盘的通知,因此可能会影响其他依赖于键盘的通知的逻辑,并影响取决于键盘框的变化的视图的框架

链接地址: http://www.djcxy.com/p/7695.html

上一篇: Dynamically Changing Keyboard Type for a UISearchBar

下一篇: Easy way to dismiss keyboard?