在iOS 6之后提供了一个分享列表视图,它通过UIActivityViewController管理。苹果设计它主要的目的是替换分享动作选单(ActionSheet),分享动作选单是出于分享目的的动作选单。
通过动作选单上的选择按钮,可以把图片分享给别人。但是随着iOS功能的不断增加,需要分享的内容越来越多,它会以模态视图方式呈现。iPad设备的分享列表,它会以Popover视图方式呈现。
从图中可以看出分享列表中可以有很多页,每页有9个应用,可以左右滑动翻页,这样就可以共享更多的内容了。
内置活动列表项
分享列表使用UIActivityViewController来控制它的呈现和关闭,凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。
下 面我们通过一个实例介绍一下使用UIActivityViewController管理内置活动列表项,这个实例点击左画面工具栏中的Action按钮, 会弹出分享列表模态视图(中图所示),如果我们选择了微博,会弹出微博撰写对话框(右图所示),可以在这里撰写微博,完成之后可以点击“发送”按钮发送微 博,如果没有在系统设置中没有设置微博账户信息,则会有提示对话框。
我们下面介绍一下代码实现部分,代码参考ViewController.m的shareAction:方法:
- (IBAction)shareAction:(id)sender { NSString *textToShare = @”请大家登录《iOS云端与网络通讯》服务网站。”; ① UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"]; ② NSURL *urlToShare = [NSURL URLWithString:@"http://www.iosbook3.com"]; ③ NSArray *activityItems = @[textToShare, imageToShare, urlToShare]; ④ UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil]; ⑤ //不出现在活动项目 activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll]; ⑥ [self presentViewController:activityVC animated:TRUE completion:nil]; ⑦ }
后面选择微博,以及发送微博这些全部是UIActivityViewController给我们封装好的,我们不需要编写一行代码
自定义活动列表项
有的时候根据我们共享内容不同,需要自动定义活动列表项。例如:你的应用是一个观看视频的应用,那么你可能需要共享视频到“优酷”视频网站。下面这一节我们介绍自定义活动列表项。
凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。这包括了iOS系统通过内置的9个活动列表,也可以是我们自定义的列表项。
下 面我们通过一个实例介绍一下使用UIActivityViewController管理自定义活动列表项,点击左画面工具栏中的Action按钮,会弹出 分享列表模态视图,其中列表中“打开Book”是我们自定义列表项,点击“打开Book”列表项执行一些操作,这里的操作是打开Book网站。
我们下面介绍一下代码实现部分,代码参考ViewController.m的shareAction:方法:
- (IBAction)shareAction:(id)sender { NSURL *urlToShare = [NSURL URLWithString:@"http://iosshare.cn/"]; ① NSArray *activityItems = @[urlToShare]; BookActivity *bookActivity = [BookActivity new]; ② NSArray *applicationActivities = @[bookActivity]; UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:applicationActivities]; ③ [self presentViewController:activityVC animated:YES completion:nil]; }
shareAction: 方法与上一节内置活动列表项类似,在本例中我们只需要一个数据项(即提供URL),第①行代码就是提供了URL。第②行代码实例化活动列表项 BookActivity,然后需要把它放到一个NSArray集合中。第③行代码实例化UIActivityViewController对象,构造方 法中applicationActivities部分参数在内置活动列表项为nil,在自定义活动列表项中是指定自定义活动列表项对象集合,就是 NSArray集合。
自定义活动列表项代码实现BookActivity.h的代码如下:
#import <UIKit/UIKit.h> @interface BookActivity : UIActivity @property (nonatomic,strong) NSURL *url; @end
自定义活动列表项必须继承UIActivity,属性url提供列表项服务的数据项。BookActivity.m的代码如下:
@implementation BookActivity - (NSString *)activityType { return NSStringFromClass([self class]); ① } - (NSString *)activityTitle { return NSLocalizedStringFromTable(@”Open Book”, @”BookActivity”, nil); ② } - (UIImage *)activityImage { return [UIImage imageNamed:@"Book"]; ③ } - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems { for (id activityItem in activityItems) { ④ if ([activityItem isKindOfClass:[NSURL class]]) { ⑤ if ([[UIApplication sharedApplication] canOpenURL:activityItem]) { ⑥ return YES; } } } return NO; } - (void)prepareWithActivityItems:(NSArray *)activityItems { for (id activityItem in activityItems) { if ([activityItem isKindOfClass:[NSURL class]]) { ⑦ _url = activityItem; ⑧ } } } - (void)performActivity { BOOL completed = [[UIApplication sharedApplication] openURL:_url]; ⑨ [self activityDidFinish:completed]; ⑩ } @end
出自《iOS网络编程与云端应用最佳实践》作者:关东升 @tony_关东升
相关推荐
在iOS开发中,UIActivityViewController是苹果提供的一种系统原生的分享界面,它允许用户将内容分享到各种社交平台或者通过其他方式(如邮件、消息)发送出去。这个压缩包"ios-UIActivityViewController系统原生分享...
【标题】"iOS实例开发源码——JTStackController for iOS.zip" 提供的是一个iOS应用开发的源代码示例,其中的核心是JTStackController。JTStackController是一个自定义的视图控制器容器,它允许开发者在iOS应用中...
iOS实例开发源码——conejoninja-Shirosuke-ff6ffa6.zip
【标题】"iOS实例开发源码——JPButton for iOS.zip" 涉及的主要知识点是iOS应用开发中的自定义控件设计,特别是针对UIButton的扩展和优化。在iOS开发中,自定义控件通常用于实现特定的设计需求或者增强用户体验。...
微信分享,友盟分享,sharesdk分享等等分享时,都只能一张图片带文字,做不到多图分享,这时候百度了一下资料就发现了iOS有一个原生控件UIActivityViewController,可以实现多图分享,在多图分享时不能带文字分享,...
【标题】"iOS实例开发源码——KKGridView for iOS.zip" 涉及的主要知识点是KKGridView,这是一个专为iOS平台设计的可定制化的网格视图控件。KKGridView是基于Apple的UITableView进行扩展和改造的,它允许开发者在...
《iOS实例开发源码——kristianbauer-PixelPuzzles-6ed81ee.zip》是一个关于iOS应用开发的源代码项目,由开发者kristianbauer创建。这个项目名为"PixelPuzzles",它很可能是一个图像拼图游戏,其中包含了许多iOS开发...
在iOS开发中,照片相关的功能是一个常见的需求,如从相册选取图片、编辑照片、分享照片等。PhotoAppLink 应用可能涉及到的API包括Photos框架(用于访问用户的照片库)和URL Scheme(用于应用程序间的跳转)。通过这...
本资源"iOS组件与框架——iOS SDK高级特性剖析 源代码"正是为了深入理解这些高级特性的绝佳实践资料。 首先,我们要理解什么是iOS组件。组件主要包括UIKit、Cocoa Touch、Core Data、Core Location等,它们是构建...
iOS实例开发源码——crylico-Number-Guesser-6f984b0.zip
iOS实例开发源码——debreuil-WordGrid-2ae0c6d.zip
iOS实例开发源码——DominikGuzei-Handshake-Iphone-2dc6d85.zip
iOS实例开发源码——daryldudey-Skirmish-1778723.zip
iOS实例开发源码——csddavies-DDGameKitHelper-af15184.zip
iOS实例开发源码——cmkilger-Vici-558464e.zip
iOS实例开发源码——dmpatierno-PunchHipster-96a8275.zip
《iOS实例开发源码——jacksinn-simon-442e226》 这个压缩包文件"iOS实例开发源码——jacksinn-simon-442e226.zip"显然包含了iOS应用开发的相关源代码。从标题我们可以推测,这可能是由开发者jacksinn或Simon创建的...
iOS实例开发源码——dangerbell-WheatKings-ce45f22.zip
iOS实例开发源码——dopiaza-Run-210b0bf.zip