首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用子类UIActivityItemProvider时没有可用的共享操作

在使用子类UIActivityItemProvider时没有可用的共享操作
EN

Stack Overflow用户
提问于 2015-02-22 00:48:19
回答 2查看 1.2K关注 0票数 2

当我只是传入一个NSString时,一切都很完美,但是当我试图传递我的自定义ItemProvider时,我没有任何共享操作可用。

MyCustomProvider

代码语言:javascript
复制
class MyCustomProvider: UIActivityItemProvider {

    var placeholder: String!
    var alternate: String!


    init(placeholder: String, alternate: String) {
        self.placeholder = placeholder
        self.alternate = alternate

        super.init()
    }

    override func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
        if activityType == UIActivityTypeMessage {
            return NSString(string: alternate)
        } else {
            return NSString(string: placeholder)
        }
    }
}

我执行的

代码语言:javascript
复制
var stringToShare = MyCustomProvider(placeholder: "Placeholder", alternate: "Alternate")

var sharingItems = [AnyObject]()
sharingItems.append(stringToShare)

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

activityViewController.excludedActivityTypes = [UIActivityTypePrint, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo, UIActivityTypeAirDrop]

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

当上面提到的stringToShare是NSString(string: "Placeholder")时,一切都很完美。我在执行过程中搞砸了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-22 01:12:18

我用以下方法解决了这个问题:

代码语言:javascript
复制
class MyCustomProvider: NSObject, UIActivityItemSource {

    var placeholder: String!
    var alternate: String!


    init(placeholder: String, alternate: String) {
        self.placeholder = placeholder
        self.alternate = alternate

        super.init()
    }

    func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
        return NSString(string: placeholder)
    }

    func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
        if activityType == UIActivityTypeMessage {
            return NSString(string: alternate)
        } else {
            return NSString(string: placeholder)
        }
    }
}

我不知道为什么,但很管用。

票数 2
EN

Stack Overflow用户

发布于 2015-04-28 21:48:55

我相信您必须将placeholderItem设置为要在item()中返回的类型。

可以代表您计划创建的实际对象的对象。对象的内容可能是空的,但对象的类必须与您计划稍后提供的对象的类匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28653231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档