2009-01-14 165 views
0

我有一个的UISearchBar和委托方法我隐藏在文本字段被清除键盘:隐藏键盘

- (void)searchBar:(UISearchBar *)filterBar textDidChange:(NSString *)filterText { 
    NSLog(@"filter: %@", filterText); 

    if ([filterText length] == 0) { 
     NSLog(@"hiding keyboard"); 
     [filterBar resignFirstResponder ]; 

现在,当我用退格键来清除搜索词的所有IS好。搜索变为空时键盘隐藏。当我按下“交叉”按钮清除搜索字段时不是这样。

好吧,不完全是真的。我确实打电话给resignFirstResponder并隐藏键盘 - 你只是无法看到它,因为它回来了。我通过观察键盘显示/隐藏事件发现了这一点。

那么键盘再次显示如何?我怎样才能防止这一点?

我已经尝试过走的UISearchBar的所有子视图,并还呼吁resignFirstResponder那些 ...但除非我做错了什么事 - 这并不无论是解决这个问题。

更新:

其实我刚拿到的键盘没有禁用“完成”按钮:-D ...所以我将“停止”从这条路下来,凯文建议。不过,我想知道为什么键盘会像这样回来。

回答

0

我基本上同意凯文,但这并不能帮助你所以这里有云:

尝试通过搜索栏的子视图循环,找到兄弟这是类的UITextField的。然后,将此文本字段的委托属性设置为您的ViewController的类,并在那里处理回调(例如,textViewShouldReturn),或直接在文本字段上直接调用resignFirstResponder。前者显然需要在初始化/加载时完成,而后者可以在现有的textDidChange回调中完成。

这里有一些更多的指针:

http://discussions.apple.com/thread.jspa?threadID=1479468&tstart=0 http://discussions.apple.com/thread.jspa?messageID=8176608

+0

“我已经试过走UISearchBar的所有子视图,并且对这些调用resignFirstResponder ...但是除非我做错了 - 那不会也不能解决这个问题。“ ...所以你确定这有效吗? – tcurdt 2009-01-15 09:50:22

1

我建议你停止试图做到这一点。当字段清空时隐藏键盘完全是非标准行为,用户不会期望它。在这种情况下,保持行为与整个系统中其他应用的一致性要好得多。

+0

我喜欢...但不幸的是,当文本长度为0时,键盘的“完成”按钮被禁用。使用额外的“取消”按钮不仅是违反直觉的,并且与用户体验相差甚远,而且还会杀死所需的屏幕房地产。另见http://www.thismuchiknow.co.uk/?p=85 – tcurdt 2009-01-14 12:14:50

1

我看你已经接受一个答案,并且不打算继续在这方面,但我上午好奇你是否能实现像你想要实现这一点:

- (BOOL)canBecomeFirstResponder 
{ 
    return !preventingKeyboardAppearance; // so to speak 
} 

- (void)searchBar:(UISearchBar *)filterBar textDidChange:(NSString *)filterText 
{ 
    // handle text 

    preventingKeyboardAppearance = YES; 
    [filterBar resignFirstResponder]; 
} 

我不清楚你会在什么情况下设置preventKeyboardAppearance回到NO,但我不知道这是否会起作用。

0
-(BOOL)textFieldShouldReturn:(UITextField *)textField { 
     [textField resignFirstResponder]; 

     return YES;  
    } 

[文本字段resignFirstResponder]不工作一段时间,因此使用此
[YorTextFieldName resignFirstResponder]它的正常工作没有任何其他 功能隐藏键BORD