默认 ios 邮件应用程序打开时关闭键盘

Dismiss keyboard when default ios mail app opens

在我的应用程序中,我显示 MFMailComposeViewController 以显示默认邮件应用程序。如何关闭在控制器中打开的键盘?

不幸的是,即使我们尝试使用 endEditing; 强制关闭键盘,该功能似乎也不起作用。在我的设备上似乎无法关闭键盘。

下面应该是有效的答案: 显示 MFMailComposeViewController 完成并在 MFMailComposeViewController 的视图上调用 endEditing:

MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
[self presentViewController:mailVC animated:YES completion:^{ 
     [mailVC.view endEditing:YES];
}];


更新:

不建议这样做,但是,这里有一个可行的 hackish 方法:

Objective-C:

MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
[self presentViewController:mailVC animated:YES completion:^{
      UITextField *a = [[UITextField alloc] init];
      [mailVC.view addSubview:a];
      [a becomeFirstResponder];
      [mailVC.view endEditing:YES];
}];

Swift:

let mailVC = MFMessageComposeViewController()
self.presentViewController(mailVC, animated: true) { () -> Void in
       let a = UITextField()
       mailVC.view.addSubview(a)
       a.becomeFirstResponder()
       mailVC.view.endEditing(true)
}
UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView* firstResponder = [keyWindow performSelector:@selector(firstResponder)];
[firstResponder resignFirstResponder];

希望这对您有所帮助..:)

在你的 viewcontroller.h 添加:

@property (nonatomic) UITapGestureRecognizer *tapRecognizer;

现在在 .m 文件中,将其添加到您的 ViewDidLoad 函数中:

    - (void)viewDidLoad 
{
        [super viewDidLoad];

        //Keyboard stuff
        tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
        tapRecognizer.cancelsTouchesInView = NO;
        [self.view addGestureRecognizer:tapRecognizer];
    }*

另外,在.m文件中添加这个函数:

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    [self.view endEditing:YES];
}