在单个UIActivityViewController中为不同的服务提供不同的内容

时间:2013-05-15 16:34:31

标签: ios uiactivityviewcontroller

我想为UIActivityIndicatorView中的不同服务提供不同的内容。例如,电子邮件的HTML字符串,Facebook / Twitter的标准字符串和复制的图像。所有这些都发生在一个弹出窗口中。

我不认为这是可能的。当我正在玩所有涉及的类时,我注意到活动视图中出现的服务随着我提供的内容类型的改变而改变。换句话说,当我提供一个字符串时,出现了一组服务。当我提供图像时,出现了设置B的服务。

接下来我尝试添加字符串和图像思维,可能会提供不同的内容,但这只是将字符串和图像添加到服务中(例如,使用字符串创建电子邮件,然后是下面的图像)。

以下是我提供字符串值(即html链接)的方法:

-(void)shareButtonTouchUpInside:(SMActionToolbarViewController*)sender{
    // Reposition anchor view for UIPopoverController to point at
    [self repositionAnchorViewToButtonFrame:self.actionToolbarViewController.shareButtonFrame];

    // Asynch download of image
    [SMUtility downloadAsset:self.selectedAsset completion:^(UIImage *image) {
        // Create image source
        SMActivitySource *activityImageSource = [[SMActivitySource alloc]initWithImage:image];
        // Create string source
        NSString *assetsString = [SMUtility assetsString:[NSArray arrayWithObject:self.selectedAsset]];
        SMActivitySource *activityStringSource = [[SMActivitySource alloc]initWithString:assetsString];

        // Present UIActiviyViewController within an UIPopoverController
        NSArray *items = [@[activityImageSource, activityStringSource]mutableCopy];
        UIActivityViewController *activityViewController = [[UIActivityViewController alloc]initWithActivityItems:items applicationActivities:nil];
        [activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed){
            // TODO: Populate mixpanel data
            [SMMixPanel eventSharePhotoMethod:@"Unknown"];
        }];
        self.buttonPopoverController = [[UIPopoverController alloc] initWithContentViewController:activityViewController];
        [self.buttonPopoverController presentPopoverFromRect:self.anchorView.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }];
}

2 个答案:

答案 0 :(得分:2)

您应该继承UIActivityItemProvider或创建符合UIActivityItemSource的对象。传入一组数组(每个你想要分享的内容),并根据activityViewController:itemForActivityType:调用中选择的活动返回一些nil。

答案 1 :(得分:0)

这个问题一次又一次被问到,修复它的唯一方法是制作自己的UIActivity,请参阅苹果文档,了解如何做到这一点。这是一个链接:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIActivity_Class/Reference/Reference.html