UIActivityViewController - 电子邮件和Twitter共享(UIActiv

2019-07-01 10:41发布

我最近开始UIActivity合作,分享我的应用程序世界,但我有几个问题。 首先,我没有找到如何设置我的电子邮件的主题。 有什么办法? 其次,当我把我的电子邮件的正文中,有一个额外的“输入”(第一个电子邮件的线路空白,我的文字在第二行开始)。 下面的代码:

 NSMutableArray *array = [[NSMutableArray alloc] initWithObjects: @"Test", nil];

    UIActivityViewController *activityViewController = [[UIActivityViewController alloc]
                                   initWithActivityItems:array applicationActivities:nil];

而在电子邮件,它表明:

测试“

第三:有没有办法知道哪些共享方法已被选中? 因为我想包括一个主题标签在我的岗位时,在Twitter上的用户共享,但现在它被集成在电子邮件也,这显然是没有意义的。

谢谢!

Answer 1:

对于添加对象到iOS6的使用UIActivityViewController的电子邮件,这是任何人都可以使用。所有你需要做的就是调用下面在初始化UIActivityViewController的最佳解决方案。

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:applicationActivities];
[activityViewController setValue:@"My Subject Text" forKey:@"subject"];

而你UIActivityViewController填充了一个主题。



Answer 2:

在iOS7,这可以通过使用 -

activityViewController:subjectForActivityType:

当发布一个项目的服务可以提供一个单独的主体字段和数据字段,诸如电子邮件消息。 如果你想为支持一个服务提供了一个主题域实现此方法。

检查- https://developer.apple.com/library/ios/documentation/uikit/reference/UIActivityItemSource_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIActivityItemSource/activityViewController:subjectForActivityType :



Answer 3:

1和2: 我如何在iOS 6中设置收件人UIActivityViewController?

虽然两者提供的方法一个黑客位,特别是第一个,它是可能的。

3:有可能分享不同的服务不同的内容,但项目的数量和它们的类型应该是相同的(但不是限制,真的,你可以为你不需要在特定的服务项目将返回零)。 你必须创建共享项目使用UIActivityItemSource协议选择了售后服务

代码我使用:

显示UIActivityViewController当前控制器的所有项目(它应该在.h文件中)的供应商:

const int numberOfSharedItems = 5;

- (IBAction)shareAction:(id)sender
{
    NSMutableArray *shareItems = [NSMutableArray new];
        while ([shareItems count] < numberOfSharedItems)
            [shareItems addObject: self];

        UIActivityViewController *shareController =
            [[UIActivityViewController alloc]
                // actual items are prepared by UIActivityItemSource protocol methods below
                initWithActivityItems: shareItems
                applicationActivities :nil];

        shareController.excludedActivityTypes = @[UIActivityTypeMessage, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll];

        [self presentViewController: shareController animated: YES completion: nil];
}

制作的占位符将共享项目:

-(id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
{
    static UIActivityViewController *shareController;
    static int itemNo;
    if (shareController == activityViewController && itemNo < numberOfSharedItems - 1)
        itemNo++;
    else {
        itemNo = 0;
        shareController = activityViewController;
    }

    switch (itemNo) {
        case 0: return @""; // intro in email
        case 1: return @""; // email text
        case 2: return [NSURL new]; // link
        case 3: return [UIImage new]; // picture
        case 4: return @""; // extra text (via in twitter, signature in email)
        default: return nil;
    }
}

请将被共享,为不同的服务不同项目的实际:

-(id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
{
    // the number of item to share
    static UIActivityViewController *shareController;
    static int itemNo;
    if (shareController == activityViewController && itemNo < numberOfSharedItems - 1)
        itemNo++;
    else {
        itemNo = 0;
        shareController = activityViewController;
    }

    NSString *shareText = [self shareText]; // whatever you fancy
    NSURL *shareURL = [self shareURL];

    // twitter
    if ([activityType isEqualToString: UIActivityTypePostToTwitter])
        switch (itemNo) {
            case 0: return nil;
            case 1: return shareText; // you can change text for twitter, I add $ to stock symbol inside shareText here, e.g. Hashtags can be added too
            case 2: return shareURL;
            case 3: return nil; // no picture
            case 4: return @"via @YourApp";
            default: return nil;
        }

    // email
    else if ([activityType isEqualToString: UIActivityTypeMail])
        switch (itemNo) {
            case 0: return @"Hi!\r\n\r\nI used YourApp\r\n";
            case 1: return shareText;
            case 2: return shareURL;
            case 3: return nil; // no picture
            case 4: return [@"\r\nCheck it out.\r\n\r\nCheers\r\n" stringByAppendingString: [self userName]];
            default: return nil;
        }

    else // Facebook or something else in the future
        switch (itemNo) {
            case 0: return nil;
            case 1: return shareText;
            case 2: return shareURL;
            case 3: return [self shareImage];
            case 4: return nil;
            default: return nil;
        }
}


Answer 4:

ü可以简单地创建一个类,如下所示:

 @interface MYNActivityProvider : UIActivityItemProvider <UIActivityItemSource>

 @end

//执行

 - (id) activityViewController:(UIActivityViewController *)activityViewController
      itemForActivityType:(NSString *)activityType
 { 
    if ( [activityType isEqualToString:UIActivityTypePostToTwitter] ) {
        return stringToPost;
     }
    if ( [activityType isEqualToString:UIActivityTypePostToFacebook] ) {
         return stringToPost;
    }
    if ( [activityType isEqualToString:UIActivityTypeMessage] ) {
        return @"SMS message text";  
    }
    if ( [activityType isEqualToString:UIActivityTypeMail] ) {
        return @"Email text here!";
    }
    if ( [activityType isEqualToString:@"Custom"] ) {
        return @"app custom text";
    }
    return nil;
 }


Answer 5:

你可能会想尝试OvershareKit 。

我们经常被问到为什么会有人改用UIActivityViewController(UIAVC)和UIActivity的OvershareKit。 UIAVC是伟大的是知道他们永远不会有需要下列任何应用程序:

  1. 永远需要多于一个或两个第三方服务整合。
  2. 从来没有需要调整UI的活动单页和共享屏幕。
  3. 从来不在乎为每个共享型独立,特定媒体内容(电子邮件与手机短信等)
  4. 决不需要有多个项目,如复制文本与在同一张纸上复制链接。
  5. 不要介意,所有的非系统提供的活动卡住枯燥的单色图标。

你的情况是(3) - 一个需要关心的不同内容不同的共享类型。



文章来源: UIActivityViewController - Email and Twitter sharing