UIActivityViewController
のカスタム サブクラスでを使用していUIActivityItemProvider
ます。私のプロバイダーUIActivityType
は、次のシーケンスを実行する場合を除いて、利用可能にしたいすべてのもので問題なく動作します。
- 表示する
UIActivityViewController
- AirDrop を使用して別のデバイスと共有する
- 別のデバイスに正常に共有したら、電子メールを送信して共有します
誤った動作は、NSString
インスタンスを提供するテキスト プロバイダーがあり、それらが電子メールの件名と本文に表示されないことです。メール作成ダイアログには、テキスト プロバイダーから提供された件名と本文が含まれている必要があります。
このシーケンスを実行すると、コンソールに次の警告が表示されます。
2014-03-27 18:35:09.065 TestApp[1347:60b] 警告 - UIActivityItemProvider <MyActivityItemProvider: 0x170296620> は無視されました (重複、実行中、または終了)
2014-03-27 18:35:09.065 TestApp[1347:60b] 警告 - UIActivityItemProvider <TestActivityItemProvider: 0x170480a00> は無視されました (重複、実行中、または終了)
2014-03-27 18:35:09.065 TestApp[1347:60b] 警告 - UIActivityItemProvider <WonderfulActivityItemProvider: 0x1704b7760> は無視されました (重複、実行中、または終了)
各警告は、UIActivityItemProvider
私が提供した警告の 1 つに対応しています。これらのプロバイダー内で、- (id)item
メソッドは次のように実装されます。
- (id)item
{
if ([self.activityType isEqualToString:UIActivityTypeMail]) {
return @"MyMailString";
}
return @""; // placeholder item
}
この種の実装により、Facebook、Twitter、Mail などにさまざまな文字列を提供できる単一のプロバイダーを作成できます。AirDrop 経由で共有する場合、テキストなしで pdf ファイルを共有します。また、AirDrop による共有は を閉じないためUIActivityViewController
、他のすべての「アクティビティ」は AirDrop による共有後に適切に機能するはずです。ご協力いただきありがとうございます!