在iOS6之后提供了一个分享列表视图,它通过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实例开发源码——JTStackController for iOS.zip
iOS实例开发源码——JTListView for iOS.zip
iOS实例开发源码——JSTokenField for iOS.zip
iOS实例开发源码——JPButton for iOS.zip
iOS实例开发源码——JSFavStarControl for iOS.zip
iOS实例开发源码——JHTickerView for iOS.zip
iOS实例开发源码——JHNotificationManager for iOS.zip
iOS实例开发源码——JMWhenTapped for iOS.zip
iOS实例开发源码——KKGridView for iOS.zip
iOS实例开发源码——JHStatusTextView for iOS.zip
iOS实例开发源码——JCTiledScrollView for iOS.zip
iOS实例开发源码——NDRotator for iOS.zip
iOS实例开发源码——PhotoAppLink for iOS.zip
iOS实例开发源码——conejoninja-Shirosuke-ff6ffa6.zip
iOS组件与框架——iOS SDK高级特性剖析 书的配套全部源代码
IOS实例开发源码——仿iOS原生计算器.zip
iOS开发快速入门——字节跳动.pptx
iOS实例开发源码——Firfi-strangepills-6b74925.zip
微信分享,友盟分享,sharesdk分享等等分享时,都只能一张图片带文字,做不到多图分享,这时候百度了一下资料就发现了iOS有一个原生控件UIActivityViewController,可以实现多图分享,在多图分享时不能带文字分享,...
IOS实例开发源码——局域网或蓝牙连接.zip