UIActivityViewController是iOS平台上一個常用的自帶分享功能控制器。在社交媒體的流行下,用戶分享的需求逐漸增多,而UIActivityViewController將多個社交平台和設備系統提供的分享途徑整合在一起,方便用戶快捷地分享內容。
一、初始化UIActivityViewController
UIActivityViewController的初始化非常簡單,只需傳入要分享的內容和分享途徑就可以了。下面的代碼演示了如何初始化一個分享圖片的UIActivityViewController。
UIImage *image = [UIImage imageNamed:@"example.jpg"]; UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[image] applicationActivities:nil]; [self presentViewController:activityVC animated:YES completion:nil];
上面的代碼將一張名為example.jpg的圖片加入了分享內容中,並且不使用自定義的應用活動。當然,開發者也可以自己實現UIActivityItemSource協議來自定義共享內容。
二、UIActivityItemSource協議的使用
UIActivityItemSource協議定義了共享內容的數據源和關於這些數據的元數據。當你的應用程序需要提供自定義數據(如HTML文檔或自定義對象),並且可能需要更精細的控制共享過程時,你就可以採用這個協議。
下面是一個簡單的示例代碼,該代碼實現了自定義的UIActivityItemSource對象,它通過實現協議的方法來返回要分享的內容和元數據。
@interface ExampleActivityItemSource : NSObject @end @implementation ExampleActivityItemSource - (id)itemForActivityType:(NSString *)activityType { return [NSURL URLWithString:@"http://www.example.com"]; } - (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController { return @""; } - (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType { return @"Example"; } - (NSString *)activityViewController:(UIActivityViewController *)activityViewController dataTypeIdentifierForActivityType:(NSString *)activityType { return @"public.url"; } @end
上面的代碼通過ExampleActivityItemSource來提供一個URL並設置元數據,其中:
- itemForActivityType: 方法返回一個URL,這將作為共享內容的實際內容。
- activityViewControllerPlaceholderItem: 方法返回了一個空字符串,因為URL本身已經提供了一個「佔位符」URL。
- activityViewController:subjectForActivityType: 方法返回了一個主題字符串,它將作為郵件或信息等共享途徑的主題,如果分享途徑不接受設置主題的話,這個方法將不會執行。
- activityViewController:dataTypeIdentifierForActivityType: 方法返回了所繼承的數據類型的標識符,即public.url ,因為URL是要進行分享的內容。
三、UIActivityViewController的屬性和委託
UIActivityViewController還有一些屬性和委託方法,使開發者能夠更細緻的控制分享行為。下面將簡要介紹一些常用的屬性和委託方法。
1、UIActivityViewController的屬性
下面是一些常用的UIActivityViewController屬性:
- excludedActivityTypes: 可以排除某些分享途徑。默認情況下,UIActivityViewController顯示所有可用的分享選項。如果需要排除某些分享途徑,可以設置此屬性,例子:activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeAirDrop];
- completionHandler: 是一個回調block,當用戶完成分享時,這個回調將被調用。回調將有一個標識完成的布爾值和完成的活動類型數組。
2、UIActivityViewController的委託
下面是一些常用的UIActivityViewController委託方法:
- activityViewController:didFinishWithActivityResult: 是一個可選的委託方法,當用戶完成分享時,它會被調用。
- activityViewControllerPlaceholderItem: 方法在數據對象為nil時提供一個佔位符。
- activityViewController:itemForActivityType: 方法與UIActivityItemSource協議的方法完全相同。
- activityViewController:subjectForActivityType: 方法的作用與UIActivityItemSource協議中的方法相同,只是委託方法沒有返回值,所以開發者只需在此方法中設置想要的內容。
下面是一個使用委託方法的示例,在用戶完成分享時將所分享的內容寫入日誌文件中。
@interface ExampleActivityViewController : UIActivityViewController @end @implementation ExampleActivityViewController - (void)activityViewController:(UIActivityViewController *)activityViewController didFinishWithActivityResult:(UIActivityViewControllerResult)result { if (result == UIActivityViewControllerResultCancelled) { NSLog(@"Cancelled."); } else { NSLog(@"Success."); } } @end
結語
UIActivityViewController是一個非常便捷的分享控制器,不僅方便了用戶的分享需求,而且也使得應用之間的互通變得更加便捷。在開發過程中,熟練掌握UIActivityViewController及其所支持的協議和委託,可以幫助開發者更好地實現自己的業務邏輯和UI界面。
原創文章,作者:XLLTJ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/317462.html