2011-02-02 120 views
9

我如何消除键盘没有按下发送或MFMailComposeViewController取消按钮?MFMailComposeViewController键盘问题

感谢您的任何帮助。

+3

出于好奇,你为什么要? – PengOne 2011-06-13 03:06:00

+0

由于使用了7KV7建议的代码,我的应用程序今天被拒绝。只是为了让你知道不要在应用商店的应用中使用它。 – 2011-10-05 20:00:16

回答

6

你可以试试这个。

UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow]; 
UIView* firstResponder = [keyWindow performSelector:@selector(firstResponder)]; 
[firstResponder resignFirstResponder]; 

希望这有助于....

+4

注意的UIWindow的`firstResponder`方法是私有的API,因此使用它容易得到苹果拒绝您的应用程序,如果你将其提交到App Store,并承担停止,恕不另行通知,如果在未来的iOS版本一起工作。 – Anomie 2011-06-08 10:24:16

2

虽然你也许可以通过发现哪个视图是第一响应者,并呼吁它resignFirstResponder(除非你的iPad和MFMailComposeViewController使用UIModalPresentationFormSheet)做到这一点,苹果可能会拒绝你的应用程序。答曰the documentation

重要:邮件撰写界面本身不是定制的,不得通过您的应用程序进行修改。

这很容易被理解为包括键盘的行为。

3

我经历了类似的问题:由于某些原因,当应用程序进入后台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 
} 

这将暗示辞职第一响应者,如果我们有当前beeing提出任何的viewController。