UIActivityViewControllerを使用して共有を表示しています。リストでメールアプリを選択すると、件名と本文が適切に設定され、Gmailアプリの場合と同様に空になります。
- (void)shareAVideoWithSubject:(NSString*)subject Link:(NSString *)string onViewController:(UIViewController *)viewController fromView:(UIView *)view {
_activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:@[string]
applicationActivities:nil];
_activityViewController.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypeAirDrop];
[_activityViewController setValue:subject forKey:@"subject"];
UIWindow *window = [[[UIApplication sharedApplication] delegate]window];
//if iPhone
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
if(!viewController){
viewController = ((SWRevealViewController*)window.rootViewController).presentedViewController;
}
[viewController presentViewController:_activityViewController
animated:YES
completion:nil];
}
//if iPad
else
{
// Change Rect to position Popover
popup = [[UIPopoverController alloc] initWithContentViewController:_activityViewController];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:view];
[popup presentPopoverFromBarButtonItem:barButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
}
StackOverFlowで以下の2つの質問を確認しました。
これらはリストに新しいアクティビティを追加するため、私の質問に対する答えではありません。むしろ、iOSにすべての共有可能なアプリを表示させたいのです。その場合、Gmailの共有本体は空になります。
前もって感謝します。スクリーンショットを追加して、
[_activityViewController setValue:subject forKey:@"subject"];
電子メールの件名を設定するための文書化されていない方法です。
本文と件名を設定する正しい方法(iOS 7.0以降)-共有するアイテムにUIActivityItemSource
プロトコルを実装します。
// EmailItemProvider.h
@interface EmailItemProvider : NSObject <UIActivityItemSource>
@property (nonatomic, strong) NSString *subject;
@property (nonatomic, strong) NSString *body;
@end
// EmailItemProvider.m
#import "EmailItemProvider.h"
@implementation EmailItemProvider
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
return _body;
}
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
return _body;
}
- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType {
return _subject;
}
@end
そしてそれを提示するよりも:
EmailItemProvider *emailItem = [EmailItemProvider new];
emailItem.subject = @"Subject";
emailItem.body = @"Body";
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:@[emailItem]
applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];
これによりメールアプリの本文と件名が設定されますが、Gmailアプリは件名を無視して本文と同じに設定しているようです。
重要:Gmailアプリにバグがあるようです。合格&
文字は、メッセージの件名と本文を空にします。使用する &
代わりに。その他の特殊文字はテストされていません。
Swift(4)愛好家のために:
activityViewController(_:subjectForActivityType:) サブジェクトを共有メソッドに置くことができます。
extension YOURViewController: UIActivityItemSource {
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return "YOUR_EMAIL_BODY"
}
func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String {
if activityType == .mail {
return "YOUR_EMAIL_SUBJECT"
} else {
return "SUBJECT_FOR_OTHER_SHARING_METHOD"
}
}
func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
if activityType == .mail {
return "YOUR_EMAIL_BODY"
} else {
return "OTHER_SHARING_MESSAGES"
}
}
}