MFMailComposeViewController键盘问题

Mob*_*oid 9 iphone iphone-softkeyboard mfmailcomposeviewcontroller

如何在不按MFMailComposeViewController中的发送或取消按钮的情况下关闭键盘?!

谢谢你的帮助.

vis*_*kh7 5

你能试试吗?

UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView* firstResponder = [keyWindow performSelector:@selector(firstResponder)];
[firstResponder resignFirstResponder];
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助....

  • 请注意,UIWindow的`firstResponder`方法是一个私有API,因此如果您将应用程序提交到App Store,使用它可能会让Apple拒绝您的应用程序,并且如果iOS将来可能会在未来通知的情况下停止工作. (5认同)

Luk*_*oss 5

我遇到了类似的问题:由于某种原因,当应用程序进入后台时,iOS 不会关闭 MFMailComposeViewController 的键盘(当应用程序再次变为活动状态时,会发生关闭)。然而,如果第一响应者是一个简单的元素(例如textview),iOS 会关闭键盘。在这种特殊情况下,调用 resignFirstResponder 对我不起作用。因为我在 applicationBecomeActive 上切换窗口(以显示登录屏幕),所以我最终有多个键盘彼此重叠(顶部的键盘不起作用)。我找到了一个简单的解决方法,可以在应用程序退出活动状态时关闭 MFMailComposeViewController 的键盘:

- (void)applicationWillResignActive:(UIApplication *)application
{
    // Workaround: MFMailComposeViewController does not dismiss keyboard when application enters background
    UITextView *dummyTextView = [[UITextView alloc] init];
    [self.window.rootViewController.presentedViewController.view addSubview:dummyTextView];
    [dummyTextView becomeFirstResponder];
    [dummyTextView resignFirstResponder];
    [dummyTextView removeFromSuperview];
    // End of workaround
}
Run Code Online (Sandbox Code Playgroud)

如果我们有当前正在呈现的任何 viewController,这将隐式地放弃第一响应者。