【问题标题】:iOS 8 Share Extension Attachments - Xcode - SwiftiOS 8 共享扩展附件 - Xcode - Swift
【发布时间】:2015-04-06 16:33:23
【问题描述】:

我向我的 iOS 应用程序添加了一个共享扩展,并使用 UIViewController 创建了一个自定义 UI,而不是默认的 SLComposeServiceViewController。 UI 工作正常,但我如何引用选择要共享的文件?例如,如果我在一张照片上点击分享,我如何引用该照片,并将其转换为 NSData。我目前有这段代码,但是当它运行时,数据似乎从未被初始化。我做错了什么?

    //Runs when button is pressed
    inputItem = extensionContext!.inputItems.first as NSExtensionItem
    attachment = inputItem.attachments![0] as NSItemProvider
    attachment.loadItemForTypeIdentifier(kUTTypeJPEG as String,
        options: nil,
        completionHandler: {(content, error: NSError!) in
            let url = content as? NSURL
            if let data = NSKeyedArchiver.archivedDataWithRootObject(url!) as NSData?{
                self.imageChosen = UIImage(data: data)!
                //Never runs
            }
            else {
                //Always runs
            }

    })

另外,当所选附件包含多个文件(照片或视频)或者是无效文件类型时,如何使扩展按钮消失。任何答案表示赞赏。提前致谢。

【问题讨论】:

  • 这个扩展的NSExtensionActivationRule 是什么样的?

标签: ios objective-c xcode swift ios8-share-extension


【解决方案1】:

这是我更喜欢共享图像和文件的方式:

//when the share button is pressed, default share phrase is added, cropped image of highscore is added

    var sharingItems = [AnyObject]()

    var shareButtonHighscore = NSUserDefaults.standardUserDefaults().objectForKey("highscore") as Int!

    sharingItems.append("I am sharing \(shareButtonHighscore)!")

    UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, 0);
    self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
    var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    sharingItems.append(image)

    let activityViewController = UIActivityViewController(activityItems: sharingItems, applicationActivities: nil)

    activityViewController.excludedActivityTypes = [UIActivityTypeCopyToPasteboard,UIActivityTypeAirDrop,UIActivityTypeAddToReadingList,UIActivityTypeAssignToContact,UIActivityTypePostToTencentWeibo,UIActivityTypePostToVimeo,UIActivityTypePrint,UIActivityTypeSaveToCameraRoll,UIActivityTypePostToWeibo]

    self.presentViewController(activityViewController, animated: true, completion: nil)

希望这会有所帮助!

【讨论】:

  • 啊,我相信这是为了在应用程序内共享。我需要的是一种方法,当您在照片库或 Safari 中的照片或文件上按共享时,它会引用该文件并将其转换为 NSData。无论如何,谢谢,这对我将来制作的游戏很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多