簡體   English   中英

MFMessageComposeViewController后鍵盤未顯示

[英]Keyboard not showing after MFMessageComposeViewController

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

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

picker.body = textView.text;

[self presentModalViewController:picker animated:YES];

一切正常,除了在MFMessageComposer發送消息或點擊取消時: 即使光標閃爍, UITextView的鍵盤也不再顯示

我嘗試了一些方法,包括按鈕代碼和-viewDidDisappear[textView resignFirstRepsonder] MFMessageComposeViewControllerDelegate方法中的[textView becomeFirstResponder]-viewDidAppear也沒有改變任何東西......

有任何想法嗎?

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

視圖消失后,您需要將視圖設為第一響應者。 將MFMessageComposeViewControllerDelegate協議添加到標頭,然后使用以下內容:

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

快樂的編碼,

贊恩

我有一個類似的問題,並能夠通過稍微延遲后調用becomeFirstResponder來解決它:

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

延遲技巧也解決了在MFMessageComposeViewController完成后立即顯示UIAlert后丟失文本光標的問題,但是延遲需要更長(在我的情況下為0.5秒)

從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];
}];

這為我解決了消失的鍵盤問題。 無需永久關閉鍵盤。

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

我無法找到更好的解決方案,所以這是我的修復:

- (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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM