2010-08-07 54 views

回答

2

在其他視圖或視圖中捕捉觸摸。在處理該觸摸時,請調用一個讓您的視圖恢復響應者狀態的選擇器。

0

做研究時發現更好的答案...

Get the current first responder without using a private API

有如何導航意見,找到的第一個響應者,其可作爲您的解決方案的基礎示例代碼

您可以先放置透明視圖,然後再將視圖作爲子視圖。然後,可以使用透明視圖中的任何觸摸事件來辭退第一響應者。

如果有多個視圖,這可能是一種方法,主視圖的邊界之外進行管理

-1
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    [yourtextfield resignFirstResponder]; 
    //You can have multiple textfields in here 
} 
+3

你能否解釋一下你的答案,至少粗略一點? – 2015-01-09 14:40:43

+0

當用戶在屏幕上觸摸時,這個委託方法將會調用,因爲這是UIViewController類的子類viewcontroller類。所以在調用此方法時,我們調用UITextField委託方法「resignFirstResponder」。 – 2015-01-10 12:05:45

0

這是很簡單的,需要在兩個步驟覆蓋:

  1. 添加手勢識別器趕上視圖抽頭
  2. 辭職第一響應

感謝@Nathan Eror爲first part。我們可以添加一個手勢識別器到viewDidLoad方法來註冊時,用戶點擊屏幕:

UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; 
[self.view addGestureRecognizer:singleFingerTap]; 

下一步,我們將增加檢測此功能和代碼來清除鍵盤:

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer { 
CGPoint location = [recognizer locationInView:[recognizer.view superview]]; 

    [textField resignFirstResponder]; 
} 

值得注意的是,如果您的視圖中有多個textField,您將需要全部辭職,因爲沒有辦法知道哪個是當前的第一響應者。

相關問題