iOS開發 - UIActivityViewController詳解

來源:互聯網
上載者:User

iOS開發 - 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中用到的資料對象數組。數組中的物件類型是可變的,並依賴於應用程式管理的資料。例如,資料可能是由一個或者多個字串/映像對象,代表了當前選中的內容。
數組中的對象,也可以通過UIActivityItemSource協議來代替,例如UIActivityItemProvider對象。源和提供者扮演代理的角色,根據實際情況,需要相應資料時再進行提供。這裡, 分享的資料包括文本, 映像, 訪問網址。 當然, 這些是可選項。 比如你不想添加url,只包含文本和映像也是可以的。這個數組不能為nil,至少要有一個對象。


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 UIActivityTypePostToTwitter      NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypePostToWeibo        NS_AVAILABLE_IOS(6_0);    // SinaWeiboUIKIT_EXTERN NSString *const UIActivityTypeMessage            NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeMail               NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypePrint              NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeCopyToPasteboard   NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeAssignToContact    NS_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 UIActivityTypePostToVimeo        NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIActivityTypePostToTencentWeibo NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIActivityTypeAirDrop            NS_AVAILABLE_IOS(7_0);

每個 Activity 類型都支援好多種不同的資料類型。例如,一條 Tweet 可能由 NSString 以及一個附加的映像 和/或 URL 所組成。
不同的 Activity 類型所支援的資料類型如下:

使用樣本
    //排除類型,  不顯示    //// default is nil. activity types listed will not be displayed    activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact,                                           UIActivityTypePrint];


五。展示

在展現view controller時,必鬚根據當前的裝置類型,使用適當的方法。在iPad上,必須通過popover來展現view controller。在iPhone和iPodtouch上,必須以模態的方式展現。

使用樣本

    //以模態的方式展現activityVC。    [self presentViewController:activityVC animated:YES completion:nil];


展示之後, 你看到的大概是這樣:

分享和自訂 UIActivity。


學習的路上, 與君共勉


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.