在iPhone应用中,我有一个UITextView
和一个按钮,可让用户将UITextView
的内容作为短信发送。代码如下所示:
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = self;
picker.body = textView.text;
[self presentModalViewController:picker animated:YES];
除了发送邮件或在MFMessageComposer
点击取消时,一切正常,但{strong> UITextView
的键盘不再显示,即使光标闪烁< /强>
我尝试了一些方法,包括按钮代码和[textView resignFirstRepsonder]
中的-viewDidDisappear
。 [textView becomeFirstResponder]
方法中的MFMessageComposeViewControllerDelegate
或-viewDidAppear
也没有改变任何内容......
有什么想法吗?
答案 0 :(得分:6)
我有同样的问题,并且已经接受了fabian的解决方案,但发现通过拨打[self dismissModalViewControllerAnimated:NO]
然后拨打[textView becomeFirstResponder]
,我能够重新出现键盘。关于动画的一些东西搞砸了键盘;看起来像是iOS 4.2中的一个错误。
答案 1 :(得分:1)
视图消失后,您需要将视图设为第一响应者。将MFMessageComposeViewControllerDelegate协议添加到标头中,然后使用以下命令:
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
[self dismissModalViewControllerAnimated:YES];
[self becomeFirstResponder];
}
快乐编码,
赞恩
答案 2 :(得分:1)
我有一个类似的问题,并且能够在稍微延迟后通过调用becomeFirstResponder来修复它:
[textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.01];
答案 3 :(得分:1)
延迟技巧还解决了在MFMessageComposeViewController完成后立即显示UIAlert后丢失文本光标的问题,但是延迟需要更长(在我的情况下为0.5秒)
答案 4 :(得分: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
。
不是一个非常好的解决方案,但是我发现的唯一一个......
答案 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];
}];
这解决了我消失的键盘问题。无需永久关闭键盘。
答案 6 :(得分:0)
如果在modal VC之前显示的viewController是导航控制器的子节点,则不会出现此行为。因此,解决方案是制作假的UINavigationController并将VC控制器添加到导航控制器。