2012-08-08 121 views
4

如果你在屏幕上有幾個文本字段,鍵盤彈出的每一個當他們挖,如果你想以編程方式隱藏鍵盤什麼,或者辭職第一響應,但是您不知道將哪個文本字段發送給resignFirstResponder消息?有沒有辦法確定哪個對象/文本字段應該得到這條消息?如何確定哪些文本框是目前第一響應

+0

的[獲取當前的第一響應者,而無需使用一個私有API]可能重複(http://stackoverflow.com/questions/1823317/get-當前第一響應者不使用一個私人api) – 2012-08-08 04:27:55

+0

我覺得'[self.view endEditing:YES];'是更好的解決方案。 – 2017-04-20 14:15:11

回答

2

的你可以跟蹤哪些文本字段的是要麼設置您的視圖控制器的第一個響應者是所有文本字段的委託對象,然後當你的子類的文本字段獲取「becomeFirstResponder」方法調用,告訴您的視圖控制器哪個文本字段是當前的。

或者,有一個更鈍力的做法,是類別擴展「UIView」:

@implementation UIView (FindAndResignFirstResponder) 
- (BOOL)findAndResignFirstResponder 
{ 
    if (self.isFirstResponder) { 
     [self resignFirstResponder]; 
     return YES;  
    } 
    for (UIView *subView in self.subviews) { 
     if ([subView findAndResignFirstResponder]) 
      return YES; 
    } 
    return NO; 
} 
@end 

,我得到了from this potentially very related question

0

沒有公共的方法來獲得當前的第一響應者,但你可以做的事情仍然得到它;第一個顯然是要自己跟蹤這個。你可以以各種方式做到這一點,如果你不想觸摸任何現有的類,但只是想讓它工作,一個類別和方法swizzling將訣竅。然而,更清晰的解決方案是遍歷視圖層次結構,並詢問它們是當前第一響應者的視圖。你可以用根UIWindow啓動並開始迭代,或者你可以用你當前UIViewController的看法開始,但請記住,當前的第一響應者並不一定是你的根的一部分UIWindow視圖層次結構(例如,如果你在UIAlertView內有一個文本字段)。

7

檢查所有的文本框的呼叫

[textfield isFirstResponder] 
0

你可以檢查你的所有文本字段,而不是輕易識別。

[textfield isFirstResponder]; 
-1

嘗試此(SWIFT 3):

if textField.isEditing { 
    textField.resingFirstResponder() 
} 
相關問題