2

我已经让这段代码运行了好几个月(在 iOS 5.1 上),但我很长时间没有检查它,现在(可能是 iOS 6.0 问题)我注意到我的 MFMailComposeViewController 即使在聚焦文本字段,如消息正文或收件人。

奇怪的是它会在点击时做出反应,所以我可以将光标设置在“收件人”或“主题”上,然后光标就会出现,或者我可以按住点击以使缩放玻璃弹出。但是没有键盘:(

截图

这是我正在使用的代码:

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

我一直在搜索这方面的内容,并找到了一些处理
[self resignFirstResponder]or的东西[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)

4

3 回答 3

2

只是大声笑。问题在于

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

在我的应用程序的某个地方。好像他们windowLevel在 iOS 6 中改变了键盘,所以现在它落后了。我很懒惰这样做,但是确切地知道windowLevel键盘窗口会很有趣:)
要小心!

无论如何感谢大家的帮助!

于 2012-12-13T16:52:44.903 回答
1

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

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

于 2012-12-13T14:51:06.437 回答
0

对于可能在 MailComposer 中遇到此键盘问题的其他人,此解决方案对我有用:

  • 呈现视图,然后在完成方法中对同一 MFMailComposeViewController 调用“becomefirstResponder”。

    MFMailComposeViewController* mailCon = [[MFMailComposeViewController alloc] init]; [self presentViewController:mailCon 动画:没有完成:^{ [mailCon becomeFirstResponder]; }];

于 2014-10-05T17:50:10.687 回答