iOS 6分享列表——UIActivityViewController详解
在iOS6之后提供了一个分享列表视图,它通过UIActivityViewController管理。苹果设计它主要的目的是替换分享动作选单(ActionSheet),分享动作选单是出于分享目的的动作选单。 通过动作选单上的选择按钮,可以把图片分享给别人。但是随着iOS功能的不断增加,需要分享的内容越来越多,它会以模态视图方式呈现。iPad设备的分享列表,它会以Popover视图方式呈现。 从图中可以看出分享列表中可以有很多页,每页有9个应用,可以左右滑动翻页,这样就可以共享更多的内容了。 内置活动列表项 分享列表使用UIActivityViewController来控制它的呈现和关闭,凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。 下 面我们通过一个实例介绍一下使用UIActivityViewController管理内置活动列表项,这个实例点击左画面工具栏中的Action按钮, 会弹出分享列表模态视图(中图所示),如果我们选择了微博,会弹出微博撰写对话框(右图所示),可以在这里撰写微博,完成之后可以点击“发送”按钮发送微 博,如果没有在系统设置中没有设置微博账户信息,则会有提示对话框。 我们下面介绍一下代码实现部分,代码参考ViewController.m的shareAction:方法: -(IBAction)shareAction:(id)sender{ NSString*textToShare=@”请大家登录《iOS云端与网络通讯》服务网站。”;① UIImage*imageToShare=[UIImageimageNamed:@"iosshare.jpg"];② NSURL*urlToShare=[NSURLURLWithString:@"http://www.iosbook3.com"];③ NSArray*activityItems=@[textToShare,imageToShare,urlToShare];④ UIActivityViewController*activityVC=[[UIActivityViewControlleralloc]initWithActivityItems:activityItems applicationActivities:nil];⑤ //不出现在活动项目 activityVC.excludedActivityTypes=@[UIActivityTypePrint,UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll];⑥ [selfpresentViewController:activityVCanimated:TRUEcompletion:nil];⑦ } 后面选择微博,以及发送微博这些全部是UIActivityViewController给我们封装好的,我们不需要编写一行代码 自定义活动列表项 有的时候根据我们共享内容不同,需要自动定义活动列表项。例如:你的应用是一个观看视频的应用,那么你可能需要共享视频到“优酷”视频网站。下面这一节我们介绍自定义活动列表项。 凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。这包括了iOS系统通过内置的9个活动列表,也可以是我们自定义的列表项。 下 面我们通过一个实例介绍一下使用UIActivityViewController管理自定义活动列表项,点击左画面工具栏中的Action按钮,会弹出 分享列表模态视图,其中列表中“打开Book”是我们自定义列表项,点击“打开Book”列表项执行一些操作,这里的操作是打开Book网站。 我们下面介绍一下代码实现部分,代码参考ViewController.m的shareAction:方法: -(IBAction)shareAction:(id)sender{ NSURL*urlToShare=[NSURLURLWithString:@"http://iosshare.cn/"];① NSArray*activityItems=@[urlToShare]; BookActivity*bookActivity=[BookActivitynew];② NSArray*applicationActivities=@[bookActivity]; UIActivityViewController*activityVC=[[UIActivityViewControlleralloc] initWithActivityItems:activityItems applicationActivities:applicationActivities];③ [selfpresentViewController:activityVCanimated:YEScompletion:nil]; } shareAction: 方法与上一节内置活动列表项类似,在本例中我们只需要一个数据项(即提供URL),第①行代码就是提供了URL。第②行代码实例化活动列表项 BookActivity,然后需要把它放到一个NSArray集合中。第③行代码实例化UIActivityViewController对象,构造方 法中applicationActivities部分参数在内置活动列表项为nil,在自定义活动列表项中是指定自定义活动列表项对象集合,就是 NSArray集合。 自定义活动列表项代码实现BookActivity.h的代码如下: #import<UIKit/UIKit.h> @interfaceBookActivity:UIActivity @property(nonatomic,strong)NSURL*url; @end 自定义活动列表项必须继承UIActivity,属性url提供列表项服务的数据项。BookActivity.m的代码如下: @implementationBookActivity -(NSString*)activityType{ returnNSStringFromClass([selfclass]);① } -(NSString*)activityTitle{ returnNSLocalizedStringFromTable(@”OpenBook”,@”BookActivity”,nil);② } -(UIImage*)activityImage{ return[UIImageimageNamed:@"Book"];③ } -(BOOL)canPerformWithActivityItems:(NSArray*)activityItems{ for(idactivityIteminactivityItems){④ if([activityItemisKindOfClass:[NSURLclass]]){⑤ if([[UIApplicationsharedApplication]canOpenURL:activityItem]){⑥ returnYES; } } } returnNO; } -(void)prepareWithActivityItems:(NSArray*)activityItems{ for(idactivityIteminactivityItems){ if([activityItemisKindOfClass:[NSURLclass]]){⑦ _url=activityItem;⑧ } } } -(void)performActivity{ BOOLcompleted=[[UIApplicationsharedApplication]openURL:_url];⑨ [selfactivityDidFinish:completed];⑩ } @end 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1195374,如需转载请自行联系原作者