[英]UI elements slide after showing 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.