iOS 6分享列表——UIActivityViewController詳解

來源:互聯網
上載者:User

在iOS 6之後提供了一個分享列表視圖,它通過UIActivityViewController管理。蘋果設計它主要的目的是替換分享動作選單(ActionSheet),分享動作選單是出於分享目的的動作選單。

通過動作選單上的選擇按鈕,可以把圖片分享給別人。但是隨著iOS功能的不斷增加,需要分享的內容越來越多,它會以模態視圖方式呈現。iPad裝置的分享列表,它會以Popover視圖方式呈現。

可以看出分享列表中可以有很多頁,每頁有9個應用,可以左右滑動翻頁,這樣就可以共用更多的內容了。

內建活動清單項目

分享列表使用UIActivityViewController來控制它的呈現和關閉,凡是繼承UIActivity抽象類別的子類對象都可以放在列表中呈現出來。

下面我們通過一個執行個體介紹一下使用UIActivityViewController管理內建活動清單項目,這個執行個體點擊左畫面工具列中的Action按鈕,會彈出分享列表模態視圖(中圖所示),如果我們選擇了微博,會彈出微博撰寫對話方塊(右圖所示),可以在這裡撰寫微博,完成之後可以點擊“發送”按鈕發送微博,如果沒有在系統設定中沒有設定微博賬戶資訊,則會有提示對話方塊。

我們下面介紹一下代碼實現部分,代碼參考ViewController.m的shareAction:方法:

- (IBAction)shareAction:(id)sender {NSString *textToShare = @”請大家登入《iOS雲端與網路通訊》服務網站。”; ①UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"]; ②NSURL *urlToShare = [NSURL URLWithString:@"http://www.iosbook3.com"]; ③NSArray *activityItems = @[textToShare, imageToShare, urlToShare];       ④UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItemsapplicationActivities:nil];  ⑤//不出現在活動項目activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll]; ⑥[self presentViewController:activityVC animated:TRUE completion:nil];  ⑦}

後面選擇微博,以及發送微博這些全部是UIActivityViewController給我們封裝好的,我們不需要編寫一行代碼

自訂活動清單項目

有的時候根據我們共用內容不同,需要自動定義活動清單項目。例如:你的應用是一個觀看視頻的應用,那麼你可能需要共用視頻到“優酷”視頻網站。下面這一節我們介紹自訂活動清單項目。

凡是繼承UIActivity抽象類別的子類對象都可以放在列表中呈現出來。這包括了iOS系統通過內建的9個活動列表,也可以是我們自訂的清單項目。

下面我們通過一個執行個體介紹一下使用UIActivityViewController管理自訂活動清單項目,點擊左畫面工具列中的Action按鈕,會彈出分享列表模態視圖,其中列表中“開啟Book”是我們自訂欄表項,點擊“開啟Book”清單項目執行一些操作,這裡的操作是開啟Book網站。

我們下面介紹一下代碼實現部分,代碼參考ViewController.m的shareAction:方法:

- (IBAction)shareAction:(id)sender {NSURL *urlToShare = [NSURL URLWithString:@"http://iosshare.cn/"]; ①NSArray *activityItems = @[urlToShare];BookActivity *bookActivity = [BookActivity new];  ②NSArray *applicationActivities = @[bookActivity];UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItemsapplicationActivities:applicationActivities];  ③[self presentViewController:activityVC animated:YES completion:nil];}

shareAction:方法與上一節內建活動清單項目類似,在本例中我們只需要一個資料項目(即提供URL),第①行代碼就是提供了URL。第②行代碼執行個體化活動清單項目BookActivity,然後需要把它放到一個NSArray集合中。第③行代碼執行個體化UIActivityViewController對象,構造方法中applicationActivities部分參數在內建活動清單項目為nil,在自訂活動清單項目中是指定自訂活動清單項目對象集合,就是NSArray集合。

自訂活動清單項目代碼實現BookActivity.h的代碼如下:

#import <UIKit/UIKit.h> @interface BookActivity : UIActivity @property (nonatomic,strong) NSURL *url; @end

自訂活動清單項目必須繼承UIActivity,屬性url提供清單項目服務的資料項目。BookActivity.m的代碼如下:

@implementation BookActivity - (NSString *)activityType  {return NSStringFromClass([self class]); ①} - (NSString *)activityTitle {return NSLocalizedStringFromTable(@”Open Book”, @”BookActivity”, nil);  ②} - (UIImage *)activityImage {return [UIImage imageNamed:@"Book"]; ③} - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {for (id activityItem in activityItems) { ④if ([activityItem isKindOfClass:[NSURL class]]) { ⑤if ([[UIApplication sharedApplication] canOpenURL:activityItem]) { ⑥return YES;}}}return NO;} - (void)prepareWithActivityItems:(NSArray *)activityItems {for (id activityItem in activityItems) {if ([activityItem isKindOfClass:[NSURL class]]) { ⑦_url = activityItem;  ⑧}}} - (void)performActivity {BOOL completed = [[UIApplication sharedApplication] openURL:_url];  ⑨[self activityDidFinish:completed];  ⑩}@end

出自《iOS網路編程與雲端應用最佳實務》作者:關東升 @tony_關東升

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.