我有一个使用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;
}
}
我知道该方法被调用,并且当选择了相关按钮时会触发正确的案例。但是屏幕键盘不会改变,除非我点击取消按钮隐藏键盘,然后再次点击搜索字段再次调出键盘。
有没有办法让键盘在屏幕上自动更改,或以编程方式隐藏它然后重新显示它?
答案 0 :(得分:24)
如果您使用的是iOS 3.2或更高版本,则可以致电:
[searchBar reloadInputViews]
并立即切换,没有hackery。至少这对我在UITextField上有用。 (我提到这个是因为辞职/成为第一响应者技巧对我来说并不完全正常,但reloadInputViews确实如此。)
答案 1 :(得分:23)
即使这是一种黑客行为,这对我有用:
- (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];
}
答案 2 :(得分:1)
[searchBar reloadInputViews]
和
[searchBar resignFirstResponder];
[searchBar becomeFirstResponder];
两者都可以工作,但第二种方法有更多的副作用,更改firstResponder,可以触发键盘的通知,因此可能会影响依赖于键盘通知的其他逻辑,并影响视图的框架,这取决于键盘框架的变化