UIActivityViewController

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, 新浪微博, 騰訊微博...)需要你在手機上綁定了登錄賬戶, 才能正常顯示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章