这段时间有不少朋友都问我关于怎么去集成
ShareSDK
或者友盟社会化分享SDK
的问题, 其实我想说,Apple
一开始就提供了一个类, 供咱们去使用分享了, 在iOS 6
以后更加加强了这个类, 使咱们再也不须要集成第三方的, 并且还支持自定义分享的item
.git
在我写这篇文章的时候, 虽然国内有一堆文章介绍
UIActivityViewController
和UIActivity
, 但都是零零散散的, 哪怕我FQ出去看YouTube
, 或者是著名的黑胡子博客, 都没有详细的讲解怎么去自定义所需的UIActivity
, 最后基本上翻遍了谷歌, 才找到了所需的.github最后:
若是你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考大家的意见再进行修改, 联系我时, 请备注UIActivityViewController
若是以为好的话, 但愿你们也能够打赏一下~嘻嘻~祝你们学习愉快~谢谢~objective-c
Cain(罗家辉)
联系方式: zhebushimengfei@qq.com
腾讯QQ: 350116542数组
这时候咱们就要来给这个自定义的
UIActivity
类写上咱们须要的内容, 首先咱们能够去到系统提供的UIActivity
头文件看API
, 获取咱们所需的API
.微信
下面是我写好的自定义
WeiboActivity
API
app
#import "WeiboActivity.h" @implementation WeiboActivity - (NSString *)activityType { return @"CustomWeiboActivity"; } - (NSString *)activityTitle { return @"新浪微博"; } - (UIImage *)activityImage { return [UIImage imageNamed:@"ShareBundle.bundle/share_icon_1"]; } - (void)performActivity { [self activityDidFinish:YES]; } @end
下面是我写好的自定义
UIActivityController
学习
#import "UIActivityController.h" #import "WeiboActivity.h" #define CAL_GET_OBJECT(objc) if (objc) return objc @interface UIActivityController () @property (nonatomic, strong) WeiboActivity *weiboActivity; @end @implementation UIActivityController - (instancetype)initAspActivityControllerWithContent:(NSArray *)activityContent { NSArray *activitys = @[self.weiboActivity]; if (self = [super initWithActivityItems:activityContent applicationActivities:activitys]) { self.excludedActivityTypes = @[UIActivityTypePostToFacebook, UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypeMail, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo, UIActivityTypeAirDrop, UIActivityTypeOpenInIBooks]; } return self; } - (WeiboActivity *)weiboActivity { CAL_GET_OBJECT(_weiboActivity); _weiboActivity = [[WeiboActivity alloc] init]; return _weiboActivity; } @end
这里和你们说说
excludedActivityTypes
这个属性, 这个属性实际上是一个数组属性, 表明的是, 若是咱们不须要系统的服务就能够给它赋值, 这样子UIActivityViewController
就不会显示对应的服务, 我这里默认所有干掉, 一个服务都不须要, 固然若是须要干掉咱们自定义的UIActivity
, 也能够在这里写上.ui
还有一点, 就是咱们给
UIActivityViewController
赋值自定义的UIActivity
atomPS: 注意一点, 这个赋值只能在
initWithActivityItems: applicationActivities:
这个方法的applicationActivities:
赋值, 并且只能在初始化的时候赋值, 一旦赋值以后就不能再修改了.code
最重要的地方来了, 就是调起咱们自定义的
UIActivityController
.首先咱们要在
Main.storyboard
中拖一个UIButton
, 而后添加对应的代码.
#import "ViewController.h" #import "UIActivityController.h" @interface ViewController () @property (nonatomic, strong) UIActivityController *activityController; @end @implementation ViewController - (IBAction)popActivityController:(UIButton *)sender { [self presentViewController:self.activityController animated:YES completion:nil]; } - (UIActivityController *)activityController { NSString *shareTitle = @"分享的标题"; UIImage *shareImage = [UIImage imageNamed:@"ShareBundle.bundle/share_icon_1"]; if (!_activityController) { _activityController = [[UIActivityController alloc] initAspActivityControllerWithContent:@[shareTitle, shareImage]]; } return _activityController; } @end
最后咱们运行一下看看效果
发现什么都没有, 确定在喷我, 以为我是在耍大家, 哈哈, 其实在这里咱们少了一个方法没有添加, 回到咱们自定义的
WeiboActivity
中, 添加上就OK了
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems { if (activityItems.count > 0) { return YES; } return NO; }
再来运行看看效果
好了,
item
出来了, 但好像有什么不对, 图标呢???!!! 为啥是灰色的? 楼主你耍我, 我要去爆你菊花!!!!!别紧张, 在系统默认的
UIActivityViewController
中, 下面这部分是属于系统服务, 默认只会显示一个轮廓, 并不会显示整张图片, 下面咱们把自定义的WeiboActivity
显示图片的方法改改就行了.
- (UIImage *)_activityImage { return [UIImage imageNamed:@"ShareBundle.bundle/share_icon_1"]; }
好了, 个人菊花保住了, 图标出来了, 把我吓了一身冷汗
图标出来了, 咱们就要给这个
item
添加点击事件了, 作什么好呢, 总不可能让我去导个微信微博等SDK进来演示, 毕竟还要去申请AppID
和AppKey
呢, 咱们来个弹框吧~~~我通常喜欢写个
Block
把点击事件抛出去作处理, 此次我也不例外~~
- (void)performActivity { [self activityDidFinish:YES]; if (self.weiboBlock) { self.weiboBlock(); } }
- (WeiboActivity *)weiboActivity { CAL_GET_OBJECT(_weiboActivity); _weiboActivity = [[WeiboActivity alloc] init]; [_weiboActivity setWeiboBlock:^{ UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"新浪微博" message:@"分享至新浪微博" delegate:nil cancelButtonTitle:@"好的" otherButtonTitles:nil, nil]; [alertView show]; }]; return _weiboActivity; }
PS: 因为我这里是作示范, 因此使用
UIAlertView
, 若是你们要在项目中使用的话, 尽可能使用UIAlertController
.
工程地址: https://github.com/CainRun/ActivityControllerDemo
好啦, 教程到这里就结束了, 谢谢你们的耐心观看