如何显示带有可用共享选项的默认iOS 6共享操作表?


97

某些应用会在iOS 6中显示带有共享选项的默认操作表。

社会框架只有两类,一类用于写作,一类用于请求。

不过,我发现的是使用SLComposeViewController编写特定服务,在显示此内容之前,我必须手动查询该服务是否可用。然后,我还必须使用自己的图标创建自己的操作表。

这些应用程序如何在iOS 6中显示此默认共享选项操作表?还是他们在使用开源框架?


我想使用微信,微博,QQ等自定义图标打开共享表并集成其功能,我该怎么做?
拉维·奥哈

只是检查这个环节也.. stackoverflow.com/a/35267035/3908884
满足多希

Answers:


223

在另一个答案中陈述的UIActivityViewController使这个琐碎。您所要做的就是指定要共享的文本/图像/ URL,并以模态显示活动视图控制器,iOS将自动显示所有适用的共享服务。例子:

物镜

- (void)shareText:(NSString *)text andImage:(UIImage *)image andUrl:(URL *)url
{
    NSMutableArray *sharingItems = [NSMutableArray new];

    if (text) {
        [sharingItems addObject:text];
    }
    if (image) {
        [sharingItems addObject:image];
    }
    if (url) {
        [sharingItems addObject:url];
    }

    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:sharingItems applicationActivities:nil];
    [self presentViewController:activityController animated:YES completion:nil];
}

迅速

func share(sharingText: String?, sharingImage: UIImage?, sharingURL: URL?) {
    let sharingItems:[AnyObject?] = [
                                        sharingText as AnyObject,
                                        sharingImage as AnyObject,
                                        sharingURL as AnyObject
                                    ] 
    let activityViewController = UIActivityViewController(activityItems: sharingItems.compactMap({$0}), applicationActivities: nil)
    if UIDevice.current.userInterfaceIdiom == .pad {
        activityViewController.popoverPresentationController?.sourceView = view
    }
    present(activityViewController, animated: true, completion: nil)
}

6
很好地编辑Swift版本。我会为+ =项目更改.append(item)。看起来更迅速-Y
伊格纳西奥英语日期

2
在最新版本的Swift中,替换AnyObject[]()[AnyObject]()
Ruben Martinez Jr.

5
它仅在登录到设置(facebook / twitter)中的相应帐户后才能工作,但是在photos app / Notes app中,即使用户未登录,该选项仍然可用,请您解释一下,为什么呢?还是有其他解决方法?
Jaldip Katre 2014年

4
我已经增加了对iPad的支持iOS 8的编辑-您还需要配置UIActivityViewControllerUIPopoverController,或者它会崩溃的present…。到目前为止,我在编辑中有3个拒绝,因此有2个拒绝,因此假设它被拒绝,也许您可​​以看到是否要自己添加编辑。或不:-)
Benjohn

哦,编辑引用了这个答案,它解释了所有内容。
约翰2014年

39

将其添加以使用UIActivityViewController

-(IBAction)shareButtonPressed:(id)sender {

    NSLog(@"shareButton pressed");

    NSString *texttoshare = _txt; //this is your text string to share
    UIImage *imagetoshare = _img; //this is your image to share
    NSArray *activityItems = @[texttoshare, imagetoshare];    
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
    activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePrint];
    [self presentViewController:activityVC animated:TRUE completion:nil];
}

2
对我的首选答案,因为您也显示排除。
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.