动态更改UISearchBar的键盘类型
我有一个使用UISearchBar
和UISearchDisplayController
的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