ボタンがいくつかのコンテンツを共有するために UIActivityViewController を表示する非常に単純なケースがあります。問題は、ユーザーがメールをキャンセルまたは送信したときに、メール コンポーザーが閉じられないことです。
NSArray *items = [NSArray arrayWithObjects:@"share",nil];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];
activityViewController.completionHandlerでモーダル ビューを閉じようとしましたが、別のアニメーションが進行中で、アプリがクラッシュすることがあるとコンソールに表示されるため、これは解決策ではありません。また、他のソーシャル ネットワーク (Facebook、Twitter) は何もしなくてもうまく機能します。
いくつかのテストの後、これは、UIActivityViewController を提示する UIViewController が UITabBarController の子である場合にのみ発生することがわかりました。AppDelegate で次のようにアプリを作成すると、機能しません。
UIViewController > UINavigationController > UITabbarController > Window
しかし、タブバーを削除すると、すべて正常に動作します!:
UIViewController > UINavigationController > Window
この問題を解決する回避策は、rootviewcontroller から提示されます。
[self.view.window.rootViewController presentViewController:activityViewController animated:YES completion:NULL];
しかし、ここで何が起こっているのか知りたいです。
ありがとう!;)