2011-01-22 55 views
3

後沒有顯示鍵盤在iPhone應用程序中,我有一個UITextView和一個按鈕,它允許用戶將UITextView的內容作爲文本消息發送。代碼如下所示:MFMessageComposeViewController

MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init]; 
picker.messageComposeDelegate = self; 

picker.body = textView.text; 

[self presentModalViewController:picker animated:YES]; 

一切工作正常,但被髮送或取消在MFMessageComposer被竊聽的消息時:鍵盤爲UITextView不再被顯示,即使光標閃爍

我試了幾件事,其中包括一個[textView resignFirstRepsonder]在按鈕代碼和-viewDidDisappear[textView becomeFirstResponder]MFMessageComposeViewControllerDelegate方法或-viewDidAppear沒有改變任何東西...

任何想法?

+0

爲什麼叫做picker? – 2011-01-22 14:40:30

+0

我不知道,蘋果也是這麼做的(參見`MessageComposer`示例)... – fabian789 2011-01-22 14:45:36

回答

6

我有同樣的問題,並辭職接受Fabian的解決方案,但發現通過調用[self dismissModalViewControllerAnimated:NO],然後調用[textView becomeFirstResponder],我能使鍵盤重新出現。關於動畫的一些事情是搞砸了鍵盤;看起來像iOS 4.2中的一個錯誤。

1

視圖消失後,您需要讓視圖成爲第一響應者。在MFMessageComposeViewControllerDelegate協議添加到您的標題,然後使用以下命令:

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{ 
    [self dismissModalViewControllerAnimated:YES]; 
    [self becomeFirstResponder]; 
} 

快樂編碼,

贊恩

+0

這沒有奏效:( – fabian789 2011-01-22 15:02:46

0

我沒能找到一個更好的解決方案,所以這裏是我的解決辦法:

- (void) actionSheet:(UIActionSheet *)actionSheet 
willDismissWithButtonIndex:(NSInteger)buttonIndex 

我關閉該鍵盤和在

- (void) actionSheet:(UIActionSheet *)actionSheet 
didDismissWithButtonIndex:(NSInteger)buttonIndex` 

我介紹了MFMessageComposeViewController

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller 
      didFinishWithResult:(MessageComposeResult)result 

[textView becomeFirstResponder],因爲它不工作。它也不在viewDidAppear:中工作。用戶必須再次點擊UITextField

不是一個很好的解決方案,但唯一一個我發現......

1

我也有類似的問題,並能夠通過調用becomeFirstResponder稍有延遲後修復:

[textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.01]; 
1

延遲伎倆也解決了顯示的UIAlert MFMessageComposeViewController結束之後後失蹤文本光標的問題,但延遲需要更長(在我的情況下0.5秒)

0

從iOS 5開始,下面是一種解決方法。你目前的MFMessageComposeViewController實例之前,辭職第一響應您的UITextView:

[self presentViewController:messageComposer animated:YES completion:NULL]; 
[textView resignFirstResponder]; 

然後在委託方法messageComposeViewController:didFinishWithResult:做到這一點:

[controller dismissViewControllerAnimated:YES completion:^{ 
    [textView performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0]; 
}]; 

這種固定消失的鍵盤問題對我來說。無需永久解僱鍵盤。

0

如果在模態VC之前顯示的viewController是導航控制器的子項,則不會出現此行爲。所以解決方法是製作假UINavigationController並將您的VC控制器添加到導航控制器。

相關問題