2013-03-24 41 views
2

我有一個問題,當顯示UITextField時,鍵盤正確顯示,但在MFMailComposeViewController呈現和解除後無法顯示。光標出現在文本框中,但沒有鍵盤。在MFMailComposeViewController被解僱後,UITextField無法顯示鍵盤

基本上,一個UIView被添加到包含的UITextField當用戶輕敲一個「創建預設」按鈕當前視圖:

[self.view addSubview:createPresetView]; 
[presetNameField becomeFirstResponder]; 

該工程。用戶可以添加多個新的預設,每次添加視圖時,文本字段將成爲第一響應者,並出現鍵盤。爲了排除presetNameField不在視圖層次結構中的問題,我也嘗試了在延遲1秒後成爲FirstFoundResponder - 結果相同。

接下來,預設可以通過電子郵件共享,使用標準MFMailComposeViewController:

MFMailComposeViewController *mailView = [[MFMailComposeViewController alloc] init]; 
[mailView setMailComposeDelegate:appController]; 
[mailView setSubject:@"New preset"]; 
[mailView setMessageBody:@"\n\nMail from app" isHTML:NO]; 
[appController presentModalViewController:mailView animated:YES]; 

郵件撰寫看法正確駁回只要我可以告訴:

[controller.view endEditing:YES]; // I added this as a test to ensure the mail view resigns first responder, no difference. 
[self dismissModalViewControllerAnimated:YES]; 
[controller release]; 
controller = nil; 

但現在創建預設按鈕添加視圖和文本字段,將文本字段設置爲第一響應者,但不會出現任何鍵盤。

我已經檢查出發生了什麼,當我做文本字段成爲FirstFoundResponder。文本字段本身是有效的,並返回YES到canBecomeFirstResponder。

我發現的唯一潛在線索是[presetNameField becomeFirstResponder] 總是返回NO(即使在顯示郵件視圖之前)。

有什麼建議嗎?

+0

你找到一個解決辦法? – 2015-02-26 10:04:04

回答

0

MFMailComposeViewController按照您的預期採用第一響應者。沒有內置機制可將firstResponder返回到文本字段。但你可以在viewWillAppear:

你甚至可以做到這一點,僅從呈現視圖控制器(如MFMailCompose)返回時是這樣的:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    // this is optional, if you care about context of presentation 
    if (!self.isBeingPresented) { // if we're not on our way up the stack of vcs 
     [self.presetNameField becomeFirstResponder]; 
    } 
} 
+0

謝謝,但是textfield不需要自動成爲第一響應者(只有當用戶試圖創建新的預設,並且應用程序要求輸入名稱時纔會發生)。問題在於,textfield在成爲第一響應者時不顯示鍵盤(但僅在顯示MailComposeView之後)。 – psonice 2013-03-24 17:12:16