2011-01-22 31 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控制器添加到导航控制器。

相关问题