這段時間有不少朋友都問我關於怎麼去集成
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
好啦, 教程到這裏就結束了, 謝謝你們的耐心觀看