如何在iOS 8系统范围的共享菜单中列出?

我正在尝试将我的iOS 8应用程序列在iOS 8系统范围的共享菜单中,用于图像扩展名.png,.jpg(.jpeg),. gif(静态)。 我需要添加到info.plist文件中? 我从iOS文档示例中尝试了下面的代码,但是没有用,我的应用程序没有显示在共享列表中。

 NSExtension  NSExtensionAttributes  NSExtensionServiceRoleType NSExtensionServiceRoleTypeEditor  NSExtensionPointIdentifier com.apple.ui-services NSExtensionPrincipalClass ActionViewController  

为了说清楚,这是iOS 8 Share Menu (也称为share sheet )我的意思是: http : //cdn1.tekrevue.com/wp-content/uploads/2014/09/ios8-share-sheets-customize。 JPG

您缺少NSExtensionActivationRule。 请参阅Apple的扩展编程指南: 声明共享或操作扩展的支持数据类型

例如,要声明您的Share扩展可以支持最多十个图像,一个电影和一个网页URL,您可以使用以下字典作为NSExtensionAttributes键的值:

 NSExtensionAttributes  NSExtensionActivationRule  NSExtensionActivationSupportsImageWithMaxCount 10 NSExtensionActivationSupportsMovieWithMaxCount 1 NSExtensionActivationSupportsWebURLWithMaxCount 1   

首先,您需要了解应用程序间通信。 您需要的是您的应用程序的自定义url方案。 请参阅: https : //developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html

现在,在您拥有自定义url之后,请执行以下操作:

要在系统范围的共享菜单中列出,您需要创建自定义活动。

创建如下所示的类:在YourActivity.h文件中

 @interface YourActivity : UIActivity -(void)someInitialisationMethod:(NSString*)string; @end 

并在YourActivity.m文件中

 #import "YourActivity.h" @implementation YourActivity - (NSString *)activityType { return @"UIActivityCategoryShare"; } - (NSString *)activityTitle { // here give the title of your app or the action name that it performs return @"YourAppName"; } + (UIActivityCategory)activityCategory {// there are two types of category- share and action return UIActivityCategoryShare; } - (UIImage *)activityImage { // Note: These images need to have a transparent background and I recommend these sizes: // iPadShare@2x should be 126 px, iPadShare should be 53 px, iPhoneShare@2x should be 100 // px, and iPhoneShare should be 50 px. I found these sizes to work for what I was making. if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { return [UIImage imageNamed:@"YourActivityImage.png"]; } else { return [UIImage imageNamed:@"YourActivityImage.png.png"]; } } - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems { NSLog(@"%s", __FUNCTION__); return YES; } - (void)prepareWithActivityItems:(NSArray *)activityItems { NSLog(@"%s",__FUNCTION__); } - (UIViewController *)activityViewController { NSLog(@"%s",__FUNCTION__); return nil; } - (void)performActivity { // This is where you can do anything you want, and is the whole reason for creating a custom // UIActivity NSURL *yourCustomURLMaybe = [NSURL URLWithString:someInitialisedString]; if ([[UIApplication sharedApplication] canOpenURL: yourCustomURL]) { [[UIApplication sharedApplication] openURL: yourCustomURL]; } else { NSLog(@"YourActivity not found"); } [self activityDidFinish:YES]; } @end 

现在您的自定义活动已经完成了您需要使用这样的共享菜单启动它

 NSString *yourCustomUrl = [NSString stringWithFormat:@"YourCustomURLScheme?..."]; NSString *escapeAdded = [yourCustomUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *finalCustomURL = [NSURL URLWithString:escapeAdded]; YourActivity *ca; if ([[UIApplication sharedApplication] canOpenURL: finalCustomURL]) { ca = [[YourActivity alloc]init]; } else { ca = nil; } NSArray *applicationActivityArray = [[NSArray alloc] initWithObjects:ca,nil]; 

最后,当您显示共享框时,将以上数组添加到应用程序活动:

 activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[...] applicationActivities:applicationActivityArray]; }