2009-01-14 324 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