重写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
那么这里有一个很好的示例项目:
这是我做到的,它在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];