У меня возникла похожая проблема: по какой-то причине iOS не закрывает клавиатуру MFMailComposeViewController, когда приложение входит в фоновый режим (отклонение происходит, когда приложение снова становится активным). Однако iOS отклоняет клавиатуру, если первый респондент является простым элементом (например, textview). Вызов 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, который в настоящее время представлен.