MFMailComposeViewController键盘问题

时间:2011-02-02 09:16:06

标签: iphone mfmailcomposeviewcontroller iphone-softkeyboard

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

你能试试吗?

UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView* firstResponder = [keyWindow performSelector:@selector(firstResponder)];
[firstResponder resignFirstResponder];
希望这会有所帮助......

答案 1 :(得分:4)

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

如果我们有任何当前正在呈现的viewController,这将隐式地重新签署第一个响应者。

答案 2 :(得分:2)

虽然您可以通过查找第一响应者并在其上调用resignFirstResponder来查看(除非您在iPad上并且MFMailComposeViewController使用UIModalPresentationFormSheet),但Apple可能会拒绝您的应用。 Quoth the documentation

  

重要提示:邮件撰写界面本身不可自定义,您的应用程序不得修改。

这可以很容易地解释为包括键盘的行为。