动态改变键盘类型为一个UISearchBar(Dynamically Changing Keyboa

2019-08-21 16:25发布

我有一个使用一个iPhone应用程序UISearchBarUISearchDisplayController 。 搜索栏有三个按钮的范围。 我想键盘是数字键盘当一个特定的范围按钮被选中,而选择了其他范围按钮时是默认的键盘。

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

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

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

有没有办法让键盘来改变自己,而它的屏幕上,或以编程方式隐藏它,然后重新出现。它?

Answer 1:

如果你使用的是iOS 3.2或更高版本,您可以拨打:

[searchBar reloadInputViews]

并立即切换而不两轮牛车。 至少,这对我的作品上的UITextField。 (我提到这一点,因为辞职/成为第一个响应者招并没有完全适合我的工作,但reloadInputViews做到了。)



Answer 2:

虽然这是怎样的一个黑客,这个工作对我来说:

- (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];

}


Answer 3:

[searchBar reloadInputViews] 

[searchBar resignFirstResponder];
[searchBar becomeFirstResponder];

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



文章来源: Dynamically Changing Keyboard Type for a UISearchBar