使用'UIActivityItemSource`协议无法与Instagram共享

问题描述:

我使用UIActivityViewController共享文本和图像。图片来自activityImage,这是一个UIImage()。自定义文本从activityText()这是从UIActivityItemSource协议返回。使用'UIActivityItemSource`协议无法与Instagram共享

问题在于,Instagram在某些条件下仅在UIActivityViewController中可见。

要summerize下面的测试:

  • Instagram的是仅可见UIActivityViewControlleractivityItems: [activityImage]activityItems: [activityImage, NSNull()]

  • Instagram的被隐藏activityItems: [activityImage, activityText()]即使当返回UIActivityItemSource协议值是""nilNSNull()

的问题是,UIActivityItemSource协议需要被调用,使不同的共享平台,可以单独管理。


问题:

  • 我怎样才能调用UIActivityItemSource协议时分享的Instagram?

  • 什么替代""nilNSNull()调用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返回零,否则返回您的字符串。

+0

谢谢@Olivier品牌,我会检查一下,并给它一个去。 – user4806509

+0

你能解释一下吗?! –