iOS开发之UIActivityViewController

上篇文章介绍了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]];
其他不变。

运行效果:

当点击该自定义服务打印:


分享文件的内容就介绍到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值