2012-10-07 6 views
8

iPhoneのPhotosアプリケーションで、[メール共有]オプションを選択すると、写真がスライドするモーダルビューコントローラにアニメーション表示されます。組み込みUIActivitiesの動作をどのように変更することが可能ですか?たとえば、私はメール作成者の件名フィールドを設定できるようにしたいと思います。UIActivityViewControllerのデフォルトの動作をオーバーライドします

答えて

15

メールコンシューマUIActivityViewControllerの件名フィールドをカスタマイズする作業はまだ完了していません。

カスタマイズしようとしているに関する文書化され、報告されたバグがあり、このここで説明:この場合は働いていた

iphone - How do I set recipients for UIActivityViewController in iOS 6?


、マニュアルに従って、あなたはこれらのメールの作曲をカスタマイズすることができるだろうフィールド:

UIActivityTypeMail: オブジェクト提供されたコンテンツを新しい電子メールメッセージに投稿します。 このサービスを使用すると、NSStringおよびUIImageオブジェクトと、アクティビティ項目のデータとしてローカルファイルを指す NSURLオブジェクトを指定できます。 また、内容がmailto スキームを使用するNSURLオブジェクトを指定することもできます。あなたはUIActivityViewControllerをカスタマイズする他の方法を探している場合

NSString *text = @"My mail text"; 
    NSURL *recipients = [NSURL URLWithString:@"mailto:[email protected]?subject=Here-is-a-Subject"]; 
    NSArray *activityItems = @[text, recipients]; 

    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
    [self presentViewController:activityController animated:YES completion:nil]; 

:だからのmailtoスキーム、それはに働いているとき、あなたはこのようなこれらのフィールドをカスタマイズすることができるはずを使用して

優れたサンプルプロジェクトがここにあります:

https://github.com/russj/ios6ShareDemo

+0

感謝をsをリンクに使用します。あなたが望むように動作しないMailやその他のものについては、あなたが望むことをするカスタムUIActivitySourceを作成することが可能だと思います。この場合、UIActivityMailを除外して、件名フィールドなどに入力するカスタムアクティビティを作成します。 – n13

4

UIActivityItemSourceプロトコルに準拠したクラスを作成これは私がそれをしなかったかであり、それはiOSの7

に私のために働いています:

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController 
{ 
    return @""; 
} 

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType 
{ 
    if ([activityType isEqualToString:UIActivityTypeMail]) 
    { 
     return @"Subject" 
    } 

    return nil; 
} 

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType 
{ 
    if ([activityType isEqualToString:UIActivityTypeMail]) 
    { 
     return @"body"; 
    } 

    return nil; 
} 
:関連するメソッドをオーバーライドする実装では

@interface CustomActivityItem : NSObject <UIActivityItemSource> 
@end 

そしてアクティビティビューコントローラ提示:

CustomActivityItem* activityItem = [[CustomActivityItem alloc] init]; 
UIActivityViewController* activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[activityItem] 
                         applicationActivities:nil]; 

[self presentViewController:activityViewController animated:YES completion:nil]; 
+0

この方法はiOS9では機能しません。ここで「init」が明示的に使用不可にマークされているというエラーが表示されます。 – DenVog

+0

私はまだXcodeバージョン7.0.1(7A1001)でコンパイルするiOS 9でこのアプローチを使用していますが、うまくいきます。正確なエラーは何ですか? – pedrobolanos

+0

これは受信者を追加しますか? – mKane

関連する問題