swift - UIActivityViewController实现只弹出隔空投送(不显示其它应用程序)

438 阅读1分钟

概念:官方文档传送门

实现方式:自定义一个对象并遵循UIActivityItemSource协议

自定义对象如下:

class AirDropOnlyActivityItemSource: NSObject,  UIActivityItemSource {
    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return NSURL(string: "")!
    }
    
    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
        return item
    }


    /// The item you want to send via AirDrop.
    let item: Any


    init(item: Any) {
        self.item = item
    }
}

使用方式如下:

let itemSource = AirDropOnlyActivityItemSource(item: 这里是任何类型,你可以传URL进去)
let activityControler = UIActivityViewController(activityItems: [itemSource], applicationActivities: nil)

备注:每一个对象都要遵循这个****UIActivityItemSource协议!!!

如果想传多个文件,则如下:

///这个数组就自己添加你想传的文件
var items: [AirDropOnlyActivityItemSource] = []
for 循环 {
    let itemSource = AirDropOnlyActivityItemSource(item: 这里是任何类型,你可以传URL进去)
    items.append(itemSource)
}
let activityControler = UIActivityViewController(activityItems: items, applicationActivities: nil)

此外,我们还可以通过设置该excludedActivityTypes属性来控制显示的内容(如果单单设置这个属性,还不足以达到我们想要的效果,因此还需要上述那样子做才行)

官方文档传送门

这里不做解释!!!