隐藏键盘

时间:2009-01-14 10:09:03

标签: iphone cocoa cocoa-touch

我有一个 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建议的那样“停止”走这条路。我仍然想知道为什么键盘会像这样重新启动。

4 个答案:

答案 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]它正常工作,而不是任何其他  用于隐藏键码的功能