MFMailComposeViewController中缺少键盘

时间:2012-12-13 09:56:09

标签: iphone objective-c ios ios6 mfmailcomposer

我已经有好几个月的代码了(在iOS 5.1上),但是我没有检查很长时间,现在(可能是iOS 6.0问题)我注意到我的MFMailComposeViewController没有显示键盘甚至在聚焦消息体或收件人等文本字段时。

奇怪的是它会对水龙头做出反应,因此我可以将光标设置在“收件人”或“主题”上并显示光标,或者我可以按住水龙头使缩放玻璃弹出。 但没有键盘 :(

SCREENSHOT OF THIS

这是我正在使用的代码:

MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
mailer.mailComposeDelegate = self;        
[self presentModalViewController:mailer animated:YES];

我一直在搜索这个问题并发现了与之相关的内容 [self resignFirstResponder][mailer becomeFirstResponder],但不起作用。

如果我在呈现控制器之前或之后添加此代码

NSLog(@"mailer become %d", [mailer canBecomeFirstResponder]);

它显示0,但

NSLog(@"self resign %d", [self resignFirstResponder]);

显示1,但在添加

之前它也是0
- (BOOL)canResignFirstResponder {
    return YES;
}

文档说默认情况下它应该返回YES,所以它很奇怪。

如果我使用这样的代码创建一个空项目,它运行良好,但我不能真正做到这一点,因为我目前的项目非常庞大。 任何帮助将不胜感激,卡在这里......

在iPhone和iOS模拟器上测试(部署目标5.1和6.0)

3 个答案:

答案 0 :(得分:2)

只是大声笑。问题在于

[UIApplication sharedApplication] delegate] window] setWindowLevel:UIWindowLevelStatusBar + 1]

在我的应用中的某个地方。好像他们在iOS 6中更改了键盘windowLevel,所以现在它已经落后了。我很懒,但知道键盘窗口的确切windowLevel会很有趣:) 小心!

感谢所有人的帮助!

答案 1 :(得分:1)

如果要显示键盘,则必须从邮件程序中取出文本框,然后发送消息“getsFirstResponder”。

但是,没有直接的方法可以做到这一点。当您触摸信息框时,键盘会出现吗?

答案 2 :(得分:0)

对于其他可能在MailComposer中提出此键盘问题的人来说,这个解决方案对我有用:

  • 显示视图然后调用" becomefirstResponder"一样的 完成方法中的MFMailComposeViewController。

    MFMailComposeViewController * mailCon = [[MFMailComposeViewController alloc] init]; [self presentViewController:mailCon animated:NO completion:^ {             [mailCon becomeFirstResponder]; }];