UIActivityItemProvider使用

UIActivityItemProvider主要用于UIActivityViewController的数据提供,它在适当的时候提供具体的数据。初始化只能通过initWithPlaceHoderItem:方法,此方法的placeholderItem用于推断UTI标识类型。activityType用于识别在哪个UIActivity中使用数据。重要属性item需要在子类中覆盖,以返回不同平台所需的数据。例如,在UIActivityTypeCopyToPasteboard中,可以返回空字符串。
部署运行你感兴趣的模型镜像

关于UIActivityItemProvider单独说是没有意义的,因为这个类只用于提供UIActivityViewController的activityItem的数据,能起到在合适的时候提供具体数据的作用

关于UIActivityViewController和UIActivity的使用就不多说了,因为这两个类的使用,介绍文档很多,比较复杂的可能就是需要在开多线程处理数据,这个我也没有过多去研究,因为我只是利用这个框架去实现分享操作而已,不涉及太复杂的东西。


言归正传:先让我们开下UIActivityItemProduct类的头文件



先看UIActivityItemProvider里面的内容


其中init方法不可用

initWithPlaceHoderItem:方法是唯一可用的用于提供初始化的方法,参数placeholderItem主要是用来推断这个provider所提供的解析的UTI标识类型是什么

activityType则是用来判断当前是在哪个UIActivity中使用这个数据

最主要的一个属性是Item,这个item属性在实现其子类的时候要求覆盖,可以为nil,不过如果为nil的时候你会发现传到activity里面的activityItem参数则少了为nil的这几个,如果是按照数组的位置来解析参数则有可能出错

一般覆盖形式如下所示:

-(id)item{

    if (self.activityType == UIActivityTypeCopyToPasteboard) {

        return @"";

    }

    return self.placeholderItem;//这个地方返回不一定是placeholderItem,根据实际需求返回即可

}


这样就可以实现根据不同的平台返回所需的数据


现在我们来看下这个类另一个值得关注的地方:



它实现了UIActivityItemSource接口
现在看下这个接口的内容


其实这个接口主要是用于方便给提供数据的,也就是说,不一定要是UIActivityItemProvider的子类才能提供数据,只要是实现了这个接口的类都可以。

这就可以解释为什么有人继承了UIActivityItemProvider后也实现了这个接口的方法,还是不能正常工作的原因,事实上从接口的描述就可以看出,在UIActivityItemProvider的子类中是不需要实现接口的头两个方法的,因为这两个方法是被描述为必要方法,既然UIActivityItemProvider已经实现了这个协议,就一定也实现了这两方法,体现出来的就是它包含的placeholderItem和Item这两个属性

所以如果需要其他自定义的话只需实现下面三个可选方法就好了~

还有一点要注意的是,虽然UIActivityItemProvider的Item属性是Id,这也不意味着你可以传一个类似数组之类的结构进去,实际上你这样传,也不会报错,可是系统就不能识别这个结构的标识符了,所以系统提供的操作,以及其他非自定义的分享等不能识别这个结构,也都会不显示的,你可以自己去获得这个数据结构,自己解析来用,这样你自定义的平台还能正常工作,但是如果不想使用系统提供的功能,也就没必要使用UIactivityViewController去实现了吧。

简而言之,使用这个类去提供UIActivityVIewControllerr类的数据需要注意以下几点
1.可以通过实现继承这个类,覆盖其子类的setItem方法,通过判断activityType属性去判断不同类型的操作,以实现不同平台操作数据不同的效果
2.没必要在继承了UIactivityItemProvider 后去实现UIActivitySource的两个必要的方法
3.如果要能让系统分别出所传的数据是什么东西,placeholderItem和item的返回类是只能是URL,String,Image等包含在UTI标识符里的
4.最好默认数据不要太多,可能会导致一部分操作识别不了的情况发生,(例如我传过两个URL,结果大部分分享平台都识别不了而隐藏了)

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值