覆盖UIActivityViewController默认行为(Override UIActivity

2019-08-01 04:57发布

在iPhone上的照片应用程序,当您选择邮件共享选项,照片动画成向上滑动模态视图控制器。 这怎么可能修改内置UIActivities的行为? 例如,我希望能够设置邮件撰写的主题领域。

Answer 1:

不幸的是,自定义的主题领域UIActivityViewController邮件作曲家还没有成型。

有一种记录和报告关于努力定制这里讨论这个错误:

iPhone -如何设置UIActivityViewController收件人的iOS 6?


如果这样的工作,根据文档,你就可以自定义这些邮件撰写字段:

UIActivityTypeMail:对象帖提供的内容,新的电子邮件。 当使用该服务,您可以提供的NSString和UIImage的对象和NSURL对象指向本地文件作为活动项目的数据。 你也可以指定NSURL对象,其内容使用mailto模式。

因此,使用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



Answer 2:

这是我做到了,它的工作对我的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];


文章来源: Override UIActivityViewController default behaviour