在不使用第三方的狀況下,採用系統原生的方法,實現分享功能。有兩種方式,一種是使用UIActivityViewController
,另一種是使用Social框架中的SLComposeViewController
。兩者的效分別果以下: 方式一的效果:ios
方式二的效果: git
說明:方式一在選擇完分享平臺後,會來到圖二中作進一步選擇。也就是說,方式二實際上是跳過了前面的選擇面板,直接分享。github
導入#import <Social/Social.h> 注意:從ios11開始,系統不容許跳過前面的選擇面板直接來到圖二(其實是來到了但馬上被dismiss了),因此,ios11後只能採用第一種方式!數組
// 點擊分享後 執行
-(void)clickShare{
//分享的標題
NSString *textToShare = @"分享的標題";
//分享的圖片
UIImage *imageToShare = [UIImage imageNamed:@"shareLOGO"];
//分享的url
NSURL *urlToShare = [NSURL URLWithString:@"http://www.."];
//若是想分享圖片 就把圖片添加進去 文字什麼的同上
NSArray *activityItems = @[textToShare,imageToShare, urlToShare];
// 建立分享vc
UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
// 設置不出如今活動的項目
activityVC.excludedActivityTypes =
@[UIActivityTypePrint,UIActivityTypeMessage,UIActivityTypeMail,
UIActivityTypePrint,UIActivityTypeAddToReadingList,UIActivityTypeOpenInIBooks,
UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll];
[vc presentViewController:activityVC animated:YES completion:nil];
// 分享以後的回調
activityVC.completionWithItemsHandler = ^(UIActivityType _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {
if (completed) {
STLog(@"completed");
//分享 成功
} else {
STLog(@"cancled");
//分享 取消
}
};
複製代碼
- excludedActivityTypes 的 可選項:
UIActivityTypeAirDrop, UIActivityTypePostToFacebook, UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypeMessage, UIActivityTypeMail, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo, UIActivityTypeOpenInIBooks微信
(iOS11以後 不適用)markdown
// 點擊分享後 執行
-(void)clickShare{
NSArray * items = self.SharePic; //分享圖片 數組
// 肯定分享服務類型(微信、QQ... ...)
NSString * serviceType = [self getServiceTypeWithType];
SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType: serviceType];
for ( id obj in items){
if ([obj isKindOfClass:[UIImage class]]){
[composeVC addImage:(UIImage *)obj];
}else if ([obj isKindOfClass:[NSURL class]]){
[composeVC addURL:(NSURL *)obj];
}
}
// 添加要分享的文字
[composeVC setInitialText:@"分享"];
// 設置 分享操做回調
composeVC.completionHandler = ^(SLComposeViewControllerResult result){
if (result == SLComposeViewControllerResultDone) {
NSLog(@"----點擊了發送");
}
else if (result == SLComposeViewControllerResultCancelled)
{
NSLog(@"----點擊了取消");
}
};
@try{
// 彈出分享框
[self presentViewController:composeVC animated:YES completion:nil];
return YES;
}
@catch (NSException *exception){
NSLog(@"沒有安裝微信"); // 捕獲 異常
return NO;
}
@finally {
}
return YES;
}
複製代碼
- 主流的serviceType可選項 :
serviceType = @"com.tencent.xin.sharetimeline";//微信
serviceType = @"com.tencent.mqq.ShareExtension";//QQ
serviceType = @"com.apple.share.SinaWeibo.post";//微博
serviceType = @"com.apple.share.TencentWeibo.post"
com.taobao.taobao4iphone.ShareExtension // 淘寶
com.apple.share.Flickr.post", // Flickr
com.laiwang.DingTalk.ShareExtension // 釘釘
com.apple.mobileslideshow.StreamShareService // iCloud
com.alipay.iphoneclient.ExtensionSchemeShare // 支付寶
com.apple.share.Facebook.post // Facebook
com.apple.share.Twitter.post // Twitter
com.apple.Health.HealthShareExtension", // 應該是健康管理
複製代碼