上篇文章介绍了UIDocumentInteractionController来实现跨App分享内容,不过那是iOS3.2的SDK,有点老了,今天在介绍一个跟分享服务有关的内容:UIActivityViewController。
下面是核心代码:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
HXActivity *hxac = [[HXActivity alloc] init];
NSURL *url = [[NSBundle mainBundle] URLForResource:@"004" withExtension:@"png"];
// 第一个参数:我们想要操作的数据的一些表征
// 第二个参数:指定了泛型,数组内的对象必须是UIActivity类的对象,代表支持我们自定义的服务
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[url] applicationActivities:nil];
// 设置属性
// 设置不需要显示的服务
activityVC.excludedActivityTypes = @[UIActivityTypePrint];
// 该控制器不能push,只能使用模态视图弹出
[self presentViewController:activityVC animated:YES completion:nil];
}
说明:
由于UIActivityViewController是继承自UIViewController,这样我们就熟悉了吧,我们可以以任意的形式来展示它,但是,官方给的解释并不是这样的,它还是不支持push操作展示的,我们只能使用模态视图展示。
其他的说明在代码中都有注释。
来看看运行的效果:
当设置属性excludedActivityTypes时候,运行效果如下,没有Print服务项:
下面我们就来重点说明在初始化UIActivityViewController的时候,两个数组是什么意思:
第一个数组:看注释吧。
第二个数组通过一个自定义服务来了解一下。自定义HXActivity(继承自UIActivity)如下:
在HXActivity.h中
#import <UIKit/UIKit.h>
@interface HXActivity : UIActivity
@end
在HXActivity.m中
#import "HXActivity.h"
@implementation HXActivity
NSString *const HXActivityTypeMySelf = @"HXActivityTypeMySelf";
// 重写以下方法
/**
* 标示自定义服务的字符串
*/
- (NSString *)activityType {
// 这里就迎合苹果官方的命名
return HXActivityTypeMySelf;
}
/**
* 服务的显示内容
*/
- (NSString *)activityTitle {
return @"自定义服务";
}
/**
* 服务显示图标
*/
- (UIImage *)activityImage {
return [UIImage imageNamed:@"004.png"];
}
/**
* 指定空运处理的数据类型,如果可以则返回YES
* 当用户选择展示UIActivityViewController的自定义服务时,在调用相应处理方法之前的准备工作都在该方法中执行
*/
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
return YES;
}
/**
* UIActivityCategoryAction:表示在UIActivityViewController最下面一栏的操作型服务
* UIActivityCategoryShare:表示在UIActivityViewController中间一栏的分享型服务(社交分享)
*/
+ (UIActivityCategory)activityCategory {
return UIActivityCategoryAction;
}
/**
* 点击自定义服务之后的操作
*/
- (void)performActivity {
NSLog(@"选中了自定义服务");
}
@end
在HXActivity.m中全部是重写父类UIActivity的方法。而且每个方法都有意义,所有以上方法必须重写,具体的含义就看注释吧。
重写完以上方法,在创建初始化UIActivityViewController对象时,代码如下:
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[url] applicationActivities:@[hxac]];
其他不变。
运行效果:
当点击该自定义服务打印:
分享文件的内容就介绍到这里。