重写UIActivityViewController的默认行为

在iPhone上的“照片”应用程序中,当您select“邮件共享”选项时,照片将滑动到滑动的模式视图控制器中。 如何修改内置UIActivities的行为? 例如,我希望能够设置邮件编辑器的主题字段。

不幸的是,自定义UIActivityViewController邮件编辑器的主题字段还没有工作。

有一个logging和报告错误有关尝试定制这里讨论:

如何在iOS 6中设置UIActivityViewController的收件人?


如果这是工作,根据文档,您将能够自定义这些邮件编辑器字段:

UIActivityTypeMail :对象将提供的内容发布到新的电子邮件。 使用此服务时,可以提供指向本地文件的NSString和UIImage对象和NSURL对象作为活动项目的数据。 你也可以指定其内容使用mailtoscheme的NSURL对象。

因此,使用mailtoscheme时,它应该能够自定义这些字段:

  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那么这里有一个很好的示例项目:

https://github.com/russj/ios6ShareDemo

这是我做到的,它在iOS 7中为我工作。

创build一个符合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];