使用'UIActivityItemSource`协议无法与Instagram共享
我使用UIActivityViewController
共享文本和图像。图片来自activityImage
,这是一个UIImage()
。自定义文本从activityText()
这是从UIActivityItemSource
协议返回。使用'UIActivityItemSource`协议无法与Instagram共享
问题在于,Instagram在某些条件下仅在UIActivityViewController
中可见。
要summerize下面的测试:
Instagram的是仅可见在
UIActivityViewController
为activityItems: [activityImage]
和activityItems: [activityImage, NSNull()]
Instagram的被隐藏为
activityItems: [activityImage, activityText()]
即使当返回UIActivityItemSource
协议值是""
,nil
,NSNull()
。
的问题是,UIActivityItemSource
协议需要被调用,使不同的共享平台,可以单独管理。
问题:
我怎样才能调用
UIActivityItemSource
协议时分享的Instagram?什么替代
""
,nil
和NSNull()
调用UIActivityItemSource
协议时,我可以试试吗?
代码:
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 ""
}
}
有人问,在回答:Share image with hashtag via UIActivityViewController (Twitter, Facebook, Instagram)
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:@[vm.image, [[ActivityStringItemSource alloc] initWithString:attributedString]] applicationActivities:nil];
和类实现字符串(或没有)的回报是:
@interface ActivityStringItemSource()<UIActivityItemSource>
@property(strong, nonatomic) NSMutableAttributedString *stringContent;
@end
@implementation ActivityStringItemSource
- (instancetype)initWithString:(NSMutableAttributedString *) placeholder
{
self = [super init];
if (self) {
_stringContent = placeholder;
}
return self;
}
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
return [NSObject new];
}
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(UIActivityType)activityType {
if([activityType containsString:@"instagram"]) {
return nil;
} else {
return _stringContent;
}
}
@end
的关键,如通过指向原来答案是返回一个NSObject(该类扩展NSObject的)。然后在项目选择中,只需测试instagram返回零,否则返回您的字符串。
谢谢@Olivier品牌,我会检查一下,并给它一个去。 – user4806509
你能解释一下吗?! –