gpt4 book ai didi

ios - 使用 `UIActivityItemSource` 协议(protocol)无法分享到 Instagram

转载 作者:搜寻专家 更新时间:2023-11-01 06:32:14 24 4
gpt4 key购买 nike

我使用 UIActivityViewController 共享文本和图像。该图像来自 activityImage,它是一个 UIImage()。自定义文本来自 activityText(),它是从 UIActivityItemSource 协议(protocol)返回的。

问题是,Instagram 仅在特定条件下在 UIActivityViewController 中可见。

汇总以下测试:

  • Instagram 仅在 UIActivityViewController可见 activityItems: [activityImage]activityItems: [activityImage, NSNull ()]

  • Instagram 为 activityItems: [activityImage, activityText()] 隐藏 即使返回的 UIActivityItemSource 协议(protocol)值为 "", nil, NSNull()

问题是需要调用UIActivityItemSource协议(protocol),这样才能对不同的分享平台进行单独管理。


Questions:

  • How can I share to Instagram when calling the UIActivityItemSource protocol?

  • What are the alternatives to "", nil and NSNull() that I could try when calling the UIActivityItemSource protocol?


代码:

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 以返回 nil,否则返回您的字符串。

关于ios - 使用 `UIActivityItemSource` 协议(protocol)无法分享到 Instagram,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45555452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com