我有一个 UISearchBar ,在委托方法中,我在清除文本字段时隐藏了键盘:
- (void)searchBar:(UISearchBar *)filterBar textDidChange:(NSString *)filterText {
NSLog(@"filter: %@", filterText);
if ([filterText length] == 0) {
NSLog(@"hiding keyboard");
[filterBar resignFirstResponder ];
现在,当我使用退格按钮清除搜索词时,一切都很好。当搜索变为空时,键盘会隐藏。当我按下“十字”按钮完全清除搜索字段时,情况并非如此。
嗯,不完全正确。我确实打电话给 resignFirstResponder 并隐藏了键盘 - 你只是看不到它,因为它回来了。我通过观察键盘显示/隐藏事件找到了这个。
那么为什么再次显示键盘呢?我该如何防止这种情况?
我已经尝试遍历 UISearchBar 的所有子视图,并在那些上调用 resignFirstResponder ...但除非我做错了 - 这无法解决这个。
更新
事实上我只是让键盘没有禁用“完成”按钮:-D ......所以我会像Kevin建议的那样“停止”走这条路。我仍然想知道为什么键盘会像这样重新启动。
答案 0 :(得分:1)
我建议你停止尝试这样做。当字段清空时隐藏键盘是完全非标准的行为,用户不会期望它。在这种情况下,最好让您的行为与整个系统中的所有其他应用程序保持一致。
答案 1 :(得分:1)
我看到你已经接受了一个答案,并且不打算继续这样做,但是我好好奇你是否可以通过实现这个来实现你想要的东西:
- (BOOL)canBecomeFirstResponder
{
return !preventingKeyboardAppearance; // so to speak
}
- (void)searchBar:(UISearchBar *)filterBar textDidChange:(NSString *)filterText
{
// handle text
preventingKeyboardAppearance = YES;
[filterBar resignFirstResponder];
}
我不清楚在什么情况下你会将preventKeyboardAppearance设置回NO,但我确实想知道这是否有效。
答案 2 :(得分:0)
我基本上同意凯文,但这对你没有帮助,所以这里:
尝试循环浏览搜索栏的子视图,找到属于UITextField类的兄弟。然后将此文本字段的delegate属性设置为ViewController的类并在那里处理回调(例如textViewShouldReturn),或者直接在文本字段上调用resignFirstResponder。前者显然需要在init / load时完成,而后者可以在现有的textDidChange回调中完成。
以下是一些指示:
http://discussions.apple.com/thread.jspa?threadID=1479468&tstart=0 http://discussions.apple.com/thread.jspa?messageID=8176608
答案 3 :(得分:0)
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
[textField resignFirstResponder]没有工作一段时间所以请使用此 [YorTextFieldName resignFirstResponder]它正常工作,而不是任何其他 用于隐藏键码的功能