iOS 6 で顧客の UIActivity サブクラスを使用する場合、最初の UIActionViewController のビューからアクションが選択されたときに表示されるカスタム ビュー コントローラーを指定できます。これを行うには、UIActivity サブクラスのactivityViewController
メソッドからカスタム ビュー コントローラーへの参照を返します。
UIActivity クラスリファレンスによると:
activityViewController
このメソッドのデフォルトの実装は を返します
nil
。ビュー コントローラーを使用して追加の UI を提供するサブクラスは、このメソッドをオーバーライドして、そのビュー コントローラーを返すことができます。このメソッドが有効なオブジェクトを返す場合、システムはperformActivity
メソッドを呼び出す代わりに、返されたビュー コントローラーを表示します。iPad では、View Controller はポップオーバー内に表示されます。iPhone と iPod touch では、View Controller はモーダルに表示されます。カスタム ビュー コントローラーは、カスタム UI を備えたビューを提供し、それらのビュー内のユーザー インタラクションを処理する必要があります。アクティビティが完了したら、View Controller を自分で閉じないでください。代わりに、メソッドを呼び出して
activityDidFinish:
、システムに却下させてください。
最初の段落の最後の部分に注意してください。iPad では、View Controller はポップオーバー内に表示されます。iPhone と iPod touch では、View Controller はモーダルに表示されます。
ただし、iPad ではactivityViewController
、UIActivityViewController を (モーダルまたはポップオーバー経由で) どのように提示しても、返されるビュー コントローラーは常にモーダルに表示されます。ポップオーバーを介して表示すると、閉じられたとは見なされないため、クラッシュが発生します。
私は何を間違っていますか?これは iOS 6 のバグですか?
更新: これは、問題を説明する単純な Xcode プロジェクトです。自由にクローンを作成して遊んで、どこが間違っているのかを確認してください: github.com/simonwhitaker/GSActivityDemo