UIActivityViewController類是一個標準的view controller,通個使用這個controller,你的應用程序就可以提供各種服務。
系統提供了一些通用的標準服務,例如拷貝內容至粘貼板、發佈一個公告至社交網、通過email或者SMS發送內容。
應用程序同樣可以自定義服務。(我的微信分享就屬於自定義服務, 之後將會寫一篇教程介紹)
你的應用程序負責配置、展現和解僱這個view controller。
viewcontroller的配置涉及到viewcontroller需要用到的具體的數據對象。(也可以指定自定義服務列表,讓應用程序支持這些服務)。
在展現view controller時,必須根據當前的設備類型,使用適當的方法。在iPad上,必須通過popover來展現view controller。在iPhone和iPodtouch上,必須以模態的方式展現。
一。UIActivityViewController 類參考
繼承自 |
UIViewController : UIResponder : NSObject |
符合 |
NSCoding (UIViewController) UIAppearanceContainer (UIViewController) NSObject (NSObject) |
框架 |
/System/Library/Frameworks/UIKit.framework |
可用性 |
iOS6以及之後 |
聲明在 |
UIActivityViewController.h |
二。初始化Activity View Controller
- (id)initWithActivityItems:(NSArray *)activityItems applicationActivities:(NSArray *)applicationActivities;
根據指定的數據初始化並返回一個新的activity view controller。
參數
1.activityItems
在執行activity中用到的數據對象數組。數組中的對象類型是可變的,並依賴於應用程序管理的數據。例如,數據可能是由一個或者多個字符串/圖像對象,代表了當前選中的內容。
2.applicationActivities
是一個UIActivity對象的數組,代表了應用程序支持的自定義服務。這個參數可以是nil。
返回值
返回一個將要展現的activity view controller。
使用示例
NSString *textToShare = @"要分享的文本內容";UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"];NSURL *urlToShare = [NSURL URLWithString:@"http://blog.csdn.net/hitwhylz"];NSArray *activityItems = @[textToShare, imageToShare, urlToShare];UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
三。訪問Completion Handler
@property(nonatomic,copy) UIActivityViewControllerCompletionHandler completionHandler;// set to nil after call
typedef void (^UIActivityViewControllerCompletionHandler)(NSString *activityType, BOOL completed);
當activityview controller被解僱時,completion handler會被執行。這可以用來處理當使用完activityview controller之後, 執行的一些相關操作。
不管是點擊了“cancel”, 還是選中了某項服務,當它結束後,都會調用這個塊,並且能捕抓到你選中的服務,來執行相關操作。
block的參數如下:
1.activityType
被用戶選擇的服務類型。如果是自定義的服務,這個值是由UIActivity對象的方法activityType返回的。如果是系統定義的activities,這個值是一個在UIActivity類參考中”Built-inActivity Types”列出來的字符串。
2.completed
如果服務被執行了,則返回YES,如果沒有則返回NO。當用戶沒有選擇一個服務,而是解僱了view controller,這個參數同樣被設置爲NO。
使用示例
//給activityVC的屬性completionHandler寫一個block。 //用以UIActivityViewController執行結束後,被調用,做一些後續處理。 UIActivityViewControllerCompletionHandler myBlock = ^(NSString *activityType,BOOL completed) { NSLog(@"activityType :%@", activityType); if (completed) { NSLog(@"completed"); } else { NSLog(@"cancel"); } //放回上一級界面 [self.navigationController dismissModalViewControllerAnimated:YES]; }; // 初始化completionHandler,當post結束之後(無論是done還是cancell)該blog都會被調用 activityVC.completionHandler = myBlock;
四。excludedActivityTypes屬性
@property(nonatomic,copy)NSArray *excludedActivityTypes
默認情況下,UIActivityViewController 將顯示所有可用於所提供內容的服務,但我們也可以排除特定的 Activity 類型。
這就要利用excludedActivityTypes屬性了,它可以聲明我們不要顯示出來的服務列表。
Activity 類型又分爲“操作”和“分享”兩大類, 具體看名稱就能區分了。
UIKIT_EXTERN NSString *const UIActivityTypePostToFacebook NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypePostToTwitterNS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypePostToWeiboNS_AVAILABLE_IOS(6_0);// SinaWeiboUIKIT_EXTERN NSString *const UIActivityTypeMessageNS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeMail NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypePrintNS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeCopyToPasteboard NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeAssignToContactNS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeSaveToCameraRoll NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeAddToReadingList NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIActivityTypePostToFlickr NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIActivityTypePostToVimeoNS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIActivityTypePostToTencentWeibo NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIActivityTypeAirDropNS_AVAILABLE_IOS(7_0);
每個 Activity 類型都支持好多種不同的數據類型。例如,一條 Tweet 可能由 NSString 以及一個附加的圖像 和/或 URL 所組成。
不同的 Activity 類型所支持的數據類型如下:
使用示例
//排除類型,不顯示//// default is nil. activity types listed will not be displayedactivityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePrint];
五。展示
在展現view controller時,必須根據當前的設備類型,使用適當的方法。在iPad上,必須通過popover來展現view controller。在iPhone和iPodtouch上,必須以模態的方式展現。
使用示例
//以模態的方式展現activityVC。[self presentViewController:activityVC animated:YES completion:nil];
展示之後, 你看到的效果圖大概是這樣:
這裏的那些分享功能(Facebook, Twitter, 新浪微博, 騰訊微博...)需要你在手機上綁定了登錄賬戶, 才能正常顯示。