iPhoneの写真アプリで[メール共有]オプションを選択すると、写真は上にスライドするモーダルビューコントローラーにアニメーション化されます。組み込みのUIActivitiesの動作を変更するにはどうすればよいですか?たとえば、メールコンポーザーの件名フィールドを設定できるようにしたいと思います。
2 に答える
UIActivityViewController
残念ながら、メールコンポーザーの件名フィールドのカスタマイズはまだ機能していません。
ここで説明されているこれをカスタマイズしようとすることに関して、文書化され報告されたバグがあります。
iphone-iOS 6でUIActivityViewControllerの受信者を設定するにはどうすればよいですか?
これが機能している場合、ドキュメントによると、これらのメールコンポーザーフィールドをカスタマイズできます。
UIActivityTypeMail:オブジェクトは、提供されたコンテンツを新しい電子メールメッセージに投稿します。このサービスを使用する場合、アクティビティアイテムのデータとしてローカルファイルを指すNSStringおよびUIImageオブジェクトとNSURLオブジェクトを提供できます。内容がmailtoスキームを使用するNSURLオブジェクトを指定することもできます。
したがって、mailtoスキームを使用すると、それが機能しているときに、次のようにこれらのフィールドをカスタマイズできるはずです。
NSString *text = @"My mail text";
NSURL *recipients = [NSURL URLWithString:@"mailto:foo@bar.com?subject=Here-is-a-Subject"];
NSArray *activityItems = @[text, recipients];
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityController animated:YES completion:nil];
カスタマイズする他の方法をお探しの場合UIActivityViewController
は、ここに優れたサンプルプロジェクトがあります。
これは私がそれをした方法であり、iOS7で私のために働いています。
UIActivityItemSourceプロトコルに準拠するクラスを作成します。
@interface CustomActivityItem : NSObject <UIActivityItemSource>
@end
実装では、関連するメソッドをオーバーライドします。
- (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;
}
次に、アクティビティビューコントローラを提示します。
CustomActivityItem* activityItem = [[CustomActivityItem alloc] init];
UIActivityViewController* activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[activityItem]
applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];