MFMessageComposeViewController后键盘未显示

时间:2011-01-22 14:38:36

标签: iphone objective-c keyboard

在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也没有改变任何内容......

有什么想法吗?

7 个答案:

答案 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控制器添加到导航控制器。