【发布时间】:2015-10-12 04:02:47
【问题描述】:
在我的应用程序中,我显示 MFMailComposeViewController 以显示默认邮件应用程序。如何关闭控制器中打开的键盘?
【问题讨论】:
标签: ios objective-c mfmailcomposeviewcontroller
在我的应用程序中,我显示 MFMailComposeViewController 以显示默认邮件应用程序。如何关闭控制器中打开的键盘?
【问题讨论】:
标签: ios objective-c mfmailcomposeviewcontroller
UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView* firstResponder = [keyWindow performSelector:@selector(firstResponder)];
[firstResponder resignFirstResponder];
我希望这会对你有所帮助.. :)
【讨论】:
不幸的是,即使我们尝试使用endEditing; 强制关闭键盘,该功能也不起作用。在我的设备上,似乎无法关闭键盘。
下面是应该有效的答案:
显示带有完成的MFMailComposeViewController,并在MFMailComposeViewController 的视图上调用endEditing:。
MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
[self presentViewController:mailVC animated:YES completion:^{
[mailVC.view endEditing:YES];
}];
更新:
不建议这样做,但是,这是一种可行的方法:
目标-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];
}];
斯威夫特:
let mailVC = MFMessageComposeViewController()
self.presentViewController(mailVC, animated: true) { () -> Void in
let a = UITextField()
mailVC.view.addSubview(a)
a.becomeFirstResponder()
mailVC.view.endEditing(true)
}
【讨论】:
在你的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];
}
【讨论】: