【问题标题】:Sending custom data via UIActivityViewController通过 UIActivityViewController 发送自定义数据
【发布时间】:2016-03-22 21:06:32
【问题描述】:

我正在尝试使用 UIActivityViewController 通过 AirDrop 将数据 (NSData) 从我的应用在一台 iOS 设备上发送到另一台设备。我在我的应用程序列表中创建了一个新的 CSM(自定义数据类型)。 public.filename-extension = ppm。 那么如何将 ppm 扩展名添加到我要发送的 NSDate 对象中?我是否正确地认为,当您呈现 UIActivityViewController 时,如果我发送的对象没有我的应用程序公共扩展 (ppm),我的应用程序图标将不会显示在 UIActivityViewController 窗口中??....是的,我是真的很迷茫!! 这是我用来展示 UIActivityViewController 的代码

    @IBAction func shareButton(sender: AnyObject) {

    // myData is the object I want to send to be used in my app on another device

    let vc = UIActivityViewController(activityItems: [myData],applicationActivities: [])
    presentViewController(vc, animated: true, completion: nil)

    }

基本上,我要做的就是发送自定义数据以在我的应用中使用

【问题讨论】:

    标签: ios uiactivityviewcontroller


    【解决方案1】:

    您应该查看AirDrop sample code,它涵盖了定义您自己的文件类型并在其他设备上与您的应用程序共享的情况。如果要共享原始数据,关键部分是您必须创建UIActivityItemSource 的实例并将其传递给UIActivityViewController。像这样的:

    class DataActivityItemSource: NSObject, UIActivityItemSource {
        let myData: NSData
        let typeIdentifier: String
        let subject: String
        let previewImage: UIImage
    
        init(myData: NSData, typeIdentifier: String, subject: String, previewImage: UIImage) {
            self.myData = myData
            self.typeIdentifier = typeIdentifier
            self.subject = subject
            self.previewImage = previewImage
        }
    
        // called to determine data type. only the class of the return type is consulted. it should match what -itemForActivityType: returns later
        @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
            return myData
        }
    
        // called to fetch data after an activity is selected. you can return nil.
        @objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
            return myData
        }
    
        // if activity supports a Subject field. iOS 7.0
        @objc func activityViewController(activityViewController: UIActivityViewController, subjectForActivityType activityType: String?) -> String {
            return subject
        }
    
        // UTI for item if it is an NSData. iOS 7.0. will be called with nil activity and then selected activity
        @objc func activityViewController(activityViewController: UIActivityViewController, dataTypeIdentifierForActivityType activityType: String?) -> String {
            return typeIdentifier
        }
    
        // if activity supports preview image. iOS 7.0
        @objc func activityViewController(activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: String?, suggestedSize size: CGSize) -> UIImage? {
            // look at suggestedSize and resize image (see AirDrop sample code for how to do this)
            return previewImage
        }
    }
    
    
    @IBAction func shareButton(sender: AnyObject) {
    
        // myData is the object I want to send to be used in my app on another device
        let itemSource = DataActivityItemSource(myData, "com.foo.ppm.typeIdentifier", "My Amazing Journey", aPreviewImage)
        let vc = UIActivityViewController(activityItems: [itemSource],applicationActivities: [])
        presentViewController(vc, animated: true, completion: nil)
    
    }
    

    【讨论】:

    • 感谢您的帮助并展示了一个示例,但我现在已经学习并在我的应用中实现了 Multipeer 框架,作为将数据传递到另一台设备的成功方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2016-03-24
    相关资源
    最近更新 更多