【问题标题】:How to display the default iOS 6 share action sheet with available share options?如何显示带有可用共享选项的默认 iOS 6 共享操作表?
【发布时间】:2012-11-10 00:15:49
【问题描述】:

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

Social Framework只有两个类,一个是作曲类,一个是请求类。

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

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

【问题讨论】:

标签: ios social-framework


【解决方案1】:

另一个答案中所述的UIActivityViewController 使这变得微不足道。您所要做的就是指定您想要共享的文本/图像/URL 并以模态方式呈现活动视图控制器,iOS 将自动显示所有适用的共享服务。例子:

目标-C

- (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)
}

【讨论】:

  • 对 Swift 版本的不错的编辑。我将 .append(item) 更改为 += 项目。看起来更快速-y
  • 在最新版本的 Swift 中,将 AnyObject[]() 替换为 [AnyObject]()
  • 它的工作,只有在登录到设置(facebook/twitter)中的相应帐户后,但在照片应用程序/笔记应用程序中,即使用户未登录,这些选项也可用,请问解释一下,为什么会这样?还是有其他解决方法?
  • 我为 iPad 上的 iOS 8 支持添加了一个编辑 - 您还需要配置 UIActivityViewControllerUIPopoverController 否则它会在 present… 上崩溃。到目前为止,我在编辑中收到了两次拒绝,所以假设它被拒绝了,也许你可以看看你是否想自己添加编辑。或者不是:-)
  • 哦,编辑引用了this answer,这解释了一切。
【解决方案2】:

添加这个以使用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];
}

【讨论】:

  • 首选回答我,因为您也显示排除。
猜你喜欢
  • 1970-01-01
  • 2013-11-10
  • 2013-07-19
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
相关资源
最近更新 更多