覆盖UIActivityViewController的默认行为

时间:2012-10-07 14:05:45

标签: ios ios6 uiactivity

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

2 个答案:

答案 0 :(得分:15)

不幸的是,自定义UIActivityViewController邮件编辑器的主题字段尚未生效。

有关于尝试自定义此处讨论的文档和报告的错误:

iphone - How do I set recipients for UIActivityViewController in iOS 6?


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

  

<强> 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

答案 1 :(得分: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];
相关问题