【发布时间】:2017-08-07 20:46:08
【问题描述】:
我使用UIActivityViewController 共享文本和图像。图片来自activityImage,这是一个UIImage()。自定义文本来自activityText(),它是从UIActivityItemSource 协议返回的。
问题是,Instagram 仅在特定条件下在 UIActivityViewController 中可见。
总结以下测试:
Instagram 仅在
UIActivityViewControlleractivityItems: [activityImage]和activityItems: [activityImage, NSNull()]中可见Instagram 对于
activityItems: [activityImage, activityText()]隐藏,即使返回的UIActivityItemSource协议值为""、nil、NSNull()。
问题是需要调用UIActivityItemSource协议,这样不同的共享平台才能分开管理。
问题:
调用
UIActivityItemSource协议时如何分享到Instagram?在调用
UIActivityItemSource协议时,我可以尝试哪些""、nil和NSNull()的替代方案?
代码:
class activityText: NSObject, UIActivityItemSource {
@objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
return ""
}
@objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
switch activityType {
case UIActivityTypeMessage:
return "Special text when sharing to Messages."
default:
return ""
}
}
}
func shareEverwhere() {
var activityImage: UIImage()
let activity = UIActivityViewController(activityItems: [activityImage, activityText()], applicationActivities: nil)
self.presentViewController(activity, animated: true, completion: nil)
}
测试:
Instagram 在UIActivityViewController中可见
let activity = UIActivityViewController(activityItems: [activityImage], applicationActivities: nil)
或
let activity = UIActivityViewController(activityItems: [activityImage, NSNull()], applicationActivities: nil)
Instagram 隐藏在UIActivityViewController
let activity = UIActivityViewController(activityItems: [activityImage, ""], applicationActivities: nil)
或
let activity = UIActivityViewController(activityItems: [activityImage, activityText()], applicationActivities: nil)
或
let activity = UIActivityViewController(activityItems: [activityImage, activityText()], applicationActivities: nil)
class activityText: NSObject, UIActivityItemSource {
@objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
return ""
}
@objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
return NSNull()
}
}
或
let activity = UIActivityViewController(activityItems: [activityImage, activityText()], applicationActivities: nil)
class activityText: NSObject, UIActivityItemSource {
@objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
return ""
}
@objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
return nil
}
}
或
let activity = UIActivityViewController(activityItems: [activityImage, activityText()], applicationActivities: nil)
class activityText: NSObject, UIActivityItemSource {
@objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
return ""
}
@objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
return ""
}
}
【问题讨论】:
标签: ios swift optimization uiactivityviewcontroller uiactivityitemprovider