【问题标题】:Missing keyboard in MFMailComposeViewControllerMFMailComposeViewController 中缺少键盘
【发布时间】:2012-12-13 09:56:09
【问题描述】:

我已经让这段代码运行了好几个月(在 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)

【问题讨论】:

  • 首先,如果你做的每件事都正确,你就不会惹恼响应者。我的意思是,与其用canBecomeFirstRespondercanResignFirstResponderbecomeFirstResponderresignFirstResponder 让情况变得更糟,不如找出问题所在并加以修复。例如,您可能希望停止使用已弃用的代码并将其替换为 presentViewController:animated:completion:
  • @A-Live 感谢您的提示,不知道它已被弃用。像你说的那样改变了它仍然无法让它工作:(
  • 我只能建议然后检查是否从主线程“呈现”(使用[[NSThread currentThread] isMainThread])。
  • @A-Live 是的,它从主线程运行。
  • 截图中没有作曲家的标题,你有没有修改MFMailComposeViewController

标签: iphone objective-c ios ios6 mfmailcomposer


【解决方案1】:

只是大声笑。问题出在

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

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

感谢大家的帮助!

【讨论】:

  • 感谢您回来回答。
  • 很棒的收获。这也发生在 MFMessageComposeViewController
【解决方案2】:

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

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

【讨论】:

  • 不,它根本不会出现,即使在触摸之后也是如此,这就是问题所在 :( 但它会在触摸时用蓝色文本光标和其他东西做出反应......将发布屏幕截图。跨度>
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2016-02-29
    • 2014-07-28
    • 1970-01-01
    相关资源
    最近更新 更多