我有一个使用UIActivityViewController
与NSExtensionActivationSupportsWebURLWithMaxCount
分享链接的应用程序,如下所示:
NSURL *shareUrl = [NSURL URLWithString:[[sarray valueForKey:@"url"] description]];
NSString* someText = @"";
NSArray* dataToShare = @[shareUrl,someText]; // ...or whatever pieces of data you want to share.
NSArray *appActivities = [NSArray arrayWithObjects:[[UIActivity alloc] init], nil];
UIActivityViewController* activityViewController = [[UIActivityViewController alloc] initWithActivityItems:dataToShare applicationActivities:appActivities];
activityViewController.excludedActivityTypes=@[UIActivityTypeAddToReadingList,UIActivityTypeAirDrop,UIActivityTypePrint,UIActivityTypeAssignToContact];
[self.navigationController presentViewController:activityViewController animated:YES completion:nil];
[activityViewController setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
if (!completed) return;
}];
除了Instagram,所有选项都会出现在UIActivityViewController
。
任何人都可以帮我发现我错在哪里或者默认是这样吗?
答案 0 :(得分:1)
默认情况下,iOS不支持Instagram。你可能需要使用第三方库。
对于iOS 6及更高版本,您可以使用此UIActivity将图像上传到Instagram,它使用iOS挂钩具有相同的工作流程,但简化了开发。
试试这个库
答案 1 :(得分:0)
Swift 4.0 +
要使instagram应用显示在图标列表中,必须在UIImage
数组中共享一个dataToShare
对象。
我遇到一个问题,我的共享项包含一个URL
和一个UIImage
,并且在共享给iMessages时,我只希望共享URL
而不是{{1 }}。
为解决此问题,我使呈现的UIViewController符合UIImage
协议,如下所示:
UIActivityItemSource
}
而不是传入包含要共享对象的活动项数组,而是像这样传入PresentingViewController:
extension PresentingViewController: UIActivityItemSource {
public func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
UIImage() // This allows instagram app to show as a choice
}
public func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
guard let items = self.items else { return nil } // items to present
switch activityType! {
case .message, .postToTwitter, .copyToPasteboard, .mail:
return items.first(where: { $0 is URL })
default: // this catches the case where IG is tapped
return items.first(where: { $0 is UIImage }) as? UIImage
}
}