9

MFMailComposeViewControllerの[送信]または[キャンセル]ボタンを押さずにキーボードを閉じるにはどうすればいいですか?MFMailComposeViewControllerキーボードの問題

ありがとうございました。

+3

好奇心を離れて、なぜあなたはしたいですか? – PengOne

+0

7KV7で提案されたコードを使用したため、私のアプリケーションは今日拒否されました。アプリストアのアプリでこれを使用しないことを知っているだけです –

答えて

6

これを試すことができますか?

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

希望あなたはおそらく(あなたがiPadとMFMailComposeViewController UIModalPresentationFormSheetを使用していますにしている場合を除き)ファーストレスポンダ方ビュー見つけ、それにresignFirstResponderを呼び出すことによってそれを行うことができますが、これは....

+4

UIWindowの 'firstResponder'メソッドはプライベートAPIなので、App Storeに提出するとAppleがあなたのアプリケーションを拒否するようになり、iOSの場合は将来のバージョンで予告なく動作を停止する可能性があります。 – Anomie

2

を助け、 Appleはあなたのアプリを拒否するかもしれません。 quothがthe documentation

重要

メール作成インターフェース自体はカスタマイズできませんし、あなたのアプリケーションによって変更することはできません。

これは、キーボードの動作を含むと容易に解釈できます。

3

私は同様の問題を経験しました。何らかの理由で、アプリケーションがバックグラウンドに入ったときに、iOSがMFMailComposeViewControllerのキーボードを閉じない(アプリケーションが再びアクティブになったときに終了します)。しかし、iOSは、最初の応答者が単純な要素(例えば、テキストビュー)であれば、キーボードを終了する。この特定のケースでは、resignFirstResponderを呼び出すことができませんでした。 私はapplicationBecomeActiveのウィンドウを(ログイン画面を表示するために)切り替えるので、複数のキーボードが互いに上にあるようになりました(上のものは動作しません)。 は、私は、アプリケーションがアクティブに辞任するときMFMailComposeViewControllerのキーボードを却下する簡単な回避策が見つかりました:私たちは現在提示されている任意のbeeingてのViewControllerを持っている場合

- (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 
} 

これは、暗黙のうちに最初の応答者を辞任します。

+0

Thx!これは、iOS> = 6(_UIRemoteView)でリモートビューを導入したために、MFMailComposeViewController(またはSLComposeViewController)のキーボードを無効にする唯一の有効な方法だと思われます。 –

+0

あなたはそれを指摘してくれてありがとうございます。これを明確にするために、リモートビューは別のプロセスで実行されるため、キーボードから遠ざけることはできませんが、最初のレスポンダにアプリケーション制御ビューを要求することで、暗黙的にキーボードの制御を引き継ぐことができます。 –

関連する問題