在iOS
通过动作选单上的选择按钮,可以把图片分享给别人。但是随着iOS功能的不断增加,需要分享的内容越来越多,它会以模态视图方式呈现。iPad设备的分享列表,它会以Popover视图方式呈现。
从图中可以看出分享列表中可以有很多页,每页有9个应用,可以左右滑动翻页,这样就可以共享更多的内容了。
内置活动列表项
分享列表使用UIActivityViewController
下面我们通过一个实例介绍一下使用UIActivityViewController
我们下面介绍一下代码实现部分,代码参考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, UIActivityTypeCopyToPast eboard, -
- UIActivityTypeAssignToCo
ntact,UIActivityTypeSaveToCame raRoll]; ⑥ -
- [self
presentViewController:activityVC animated:TRUE completion:nil]; ⑦ -
- }
后面选择微博,以及发送微博这些全部是UIActivityViewController
自定义活动列表项
有的时候根据我们共享内容不同,需要自动定义活动列表项。例如:你的应用是一个观看视频的应用,那么你可能需要共享视频到“优酷”视频网站。下面这一节我们介绍自定义活动列表项。
凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。这包括了iOS系统通过内置的9个活动列表,也可以是我们自定义的列表项。
下面我们通过一个实例介绍一下使用UIActivityViewController
我们下面介绍一下代码实现部分,代码参考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
自定义活动列表项代码实现BookActivity.h的代码如下:
- #import
-
-
-
- @interface
BookActivity : UIActivity -
-
-
- @property
(nonatomic,strong) NSURL *url; -
-
-
- @end
自定义活动列表项必须继承UIActivity,属性url提供列表项服务的数据项。BookActivity.m的代码如下:
- @implementation
BookActivity -
-
-
- -
(NSString *)activityType { -
- return
NSStringFromClass([self class]); ① -
- }
-
-
-
- -
(NSString *)activityTitle { -
- return
NSLocalizedStringFromTab le(@”Open Book”, @”BookActivity”, nil); ② -
- }
-
-
-
- -
(UIImage *)activityImage { -
- return
[UIImage imageNamed:@"Book"]; ③ -
- }
-
-
-
- -
(BOOL)canPerformWithActivityIt ems:(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