9

在 iPhone 上的照片应用程序中,当您选择邮件共享选项时,照片会以动画方式进入向上滑动的模态视图控制器。如何修改内置 UIActivities 的行为?例如,我希望能够设置邮件撰写者的主题字段。

4

2 回答 2

15

不幸的是,自定义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这里有一个很好的示例项目:

https://github.com/russj/ios6ShareDemo

于 2012-10-17T15:38:30.157 回答
4

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

创建一个符合 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];
于 2014-02-12T16:45:48.847 回答