动态更改 UISearchBar 的键盘类型
Posted
技术标签:
【中文标题】动态更改 UISearchBar 的键盘类型【英文标题】:Dynamically Changing Keyboard Type for a UISearchBar 【发布时间】:2009-10-20 12:44:42 【问题描述】:我有一个使用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;
我知道在选择有问题的按钮时会触发正确的案例。但是屏幕键盘不会改变,除非我点击取消按钮隐藏键盘,然后再次点击搜索字段以再次调出键盘。
有没有办法让键盘在屏幕上时自行改变,或者以编程方式隐藏它然后重新显示?
【问题讨论】:
【参考方案1】:如果您使用的是 ios 3.2 或更新版本,您可以调用:
[searchBar reloadInputViews]
它会立即切换而无需黑客攻击。至少这在 UITextField 上对我有用。 (我提到这一点是因为辞职/成为第一响应者的技巧对我来说并不完全正确,但 reloadInputViews 可以。)
【讨论】:
仅供参考,[searchBar reloadInputViews] 在大多数地方都不起作用 Xcode 4.2 for iOS 5.0.1。使用的键盘类型是情节提要中指定的键盘类型,我只能在 (void)searchBar:(UISearchBar *)aSearchBar textDidChange:(NSString *)searchText 中更改键盘类型。我已经尝试在 VDL 中更改它,在 UIKeyboardDidShowNotification 之后,没有任何问题。 我发现了一个缺点:如果用户同时输入数字和字母,调用这个方法会自动切换到字母键盘,即使他想继续输入数字 这应该是公认的答案。辞职和设置第一响应者可能会产生意想不到的副作用。 不幸的是(2019 年)这对我不起作用 - 你似乎必须辞职/成为。是的,你必须小心你的文本输入处理代码。【参考方案2】:尽管这是一种 hack,但这对我有用:
- (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];
【讨论】:
谢谢。我认为这将是解决方案,但希望不那么“不干净”。 很有趣,如果你调用 resignFirstResponder 和 becomeFirstResponder 之后立即切换键盘而不关闭【参考方案3】:[searchBar reloadInputViews]
和
[searchBar resignFirstResponder];
[searchBar becomeFirstResponder];
两者都可以,但是第二种方法副作用更大,改变firstResponder,可以触发键盘的通知,所以可能会影响其他依赖键盘通知的逻辑,并影响依赖于键盘框架变化的视图框架
【讨论】:
以上是关于动态更改 UISearchBar 的键盘类型的主要内容,如果未能解决你的问题,请参考以下文章
iPhone UISearchBar & keyboard外观