2013-06-04 38 views
1

我有ConfigureViewController包含一些UIButtons和UITextField * MyTextField。每按一下按鈕,就會彈出一個使用presentViewController:animated:completion:的對話式視圖控制器。但是,如果在編輯文本字段時點擊其中一個按鈕,當關閉對話框並返回到原始屏幕時,我無法將焦點返回或鍵入文本字段。如果presentViewController編輯時無法輸入UITextField

這是點擊按鈕時調用的方法。

-(void)AdvancedInfoButtonPressed :(id)sender 
{ 
    AdvancedInfoPopViewController *myAdvancedInfoViewController = [[AdvancedInfoPopViewController alloc] init]; 
    [myAdvancedInfoViewController setDelegateAndDevice :self :Current_Device]; 
    myAdvancedInfoViewController.modalPresentationStyle = UIModalPresentationFormSheet; 
    [self presentViewController :myAdvancedInfoViewController animated :NO completion :nil]; 
} 

沒有明確地MyTextField移除焦點,呈現AdvancedInfoViewController不會自動取消鍵盤。

我懷疑問題是MyTextField仍然認爲它有焦點(即使鍵盤和閃爍的光標已經消失),所以不能讓自己再次成爲第一響應者。沿着這些路線,我發現如果在呈現對話框視圖控制器之前添加[MyTextField resignFirstResponder],問題就會消失。

但是,這似乎並不是一個很好的解決方案,因爲它意味着必須記住在幾個地方作爲第一響應者(導致難以維護的代碼)辭職該文本字段(或任何其他文本字段)。我的問題是:當ConfigureViewController將被AdvancedInfoViewController(或AdvancedInfoViewController被解僱並且重點返回到ConfigureViewController)部分模糊時,是否有任何事件可以掛鉤到其中,其中我可以添加一些邏輯來清理MyTextField的firstResponder狀態?

我試過viewWillDisappearviewWillAppear但他們從來沒有在ConfigureViewController上被調用過。

我也嘗試添加textFieldDidEndEnding到文本字段的委託,但儘管它被稱爲它沒有解決問題。

-(void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    [MyTextField resignFirstResponder]; 
} 

回答

1

您可以使用[self.view endEditing:YES]辭職在你提出myAdvancedInfoViewController的情況下,所有的第一反應。

要在發生此事件後將焦點返回到textField,您需要跟蹤myAdvancedInfoViewController出現時哪個textField處於活動狀態。當myAdvancedInfoViewController被解除時,請爲適當的文本字段調用UITextField的becomeFirstResponder方法。