前言

	NS_CLASS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED @interface UIActivityViewController : UIViewController
@available(iOS 6.0, *) public class UIActivityViewController : UIViewController
  • UIActivity 是 iOS 6.0 开始的一个十分有用的控件,可以十分方便的将文字、图片等内容进行分享,比如分享到微信、新浪微博、发邮件、发短信等。我们不仅可以分享内容出来,也可以在自己的 App 里添加自定义的分享按钮或者隐藏已有的分享按钮来实现定制的功能。

1、系统 activityViewController 的创建

  • Objective-C

    	// 设置分享的内容
    NSString *textToShare = @"请大家登录《iOS云端与网络通讯》服务网站。";
    UIImage *imageToShare = [UIImage imageNamed:@"swift"];
    NSURL *urlToShare = [NSURL URLWithString:@"http://m.baidu.com"]; // 创建分享视图控制器
    /*
    activityItems: 分享的内容
    applicationActivities: 分享的类型,默认(nil)时为 UIActivity
    */
    UIActivityViewController *activityViewController = [[UIActivityViewController alloc]
    initWithActivityItems:@[textToShare, imageToShare, urlToShare]
    applicationActivities:nil]; // 设置不出现的分享按钮
    /*
    Activity 类型又分为 “操作” 和 “分享” 两大类: UIActivityCategoryAction 操作:
    UIActivityTypeAirDrop AirDrop AirDrop
    UIActivityTypePrint 打印 Print UIActivityTypeSaveToCameraRoll 保存到相册 Save Image
    UIActivityTypeAssignToContact 添加到联系人 AssignToContact
    UIActivityTypeAddToReadingList 添加到 Safari 阅读列表 AddToReadingList
    UIActivityTypeCopyToPasteboard 复制到剪贴板 Copy UIActivityCategoryShare 分享:
    UIActivityTypeMail 邮箱 Mail
    UIActivityTypeMessage 短信 Message UIActivityTypePostToTwitter 分享到 Twitter
    UIActivityTypePostToFacebook 分享到 Facebook
    UIActivityTypePostToVimeo 分享到 Vimeo(视频媒体)
    UIActivityTypePostToFlickr 分享到 Flickr(网络相簿)
    UIActivityTypePostToWeibo 分享到 新浪微博
    UIActivityTypePostToTencentWeibo 分享到 腾讯微博 添加到此数组中的系统分享按钮项将不会出现在分享视图控制器中
    */
    activityViewController.excludedActivityTypes = @[UIActivityTypeAssignToContact,
    UIActivityTypePrint]; // 显示分享视图控制器
    [self presentViewController:activityViewController animated:YES completion:nil]; // 分享完成
    activityViewController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed,
    NSArray *returnedItems, NSError *activityError) { // 分享完成或退出分享时调用该方法
    NSLog(@"分享完成");
    };
  • Swift

    	// 设置分享的内容
    
    	let textToShare = "请大家登录《iOS云端与网络通讯》服务网站。"
    let imageToShare: AnyObject = UIImage(named: "swift") as! AnyObject
    let urlToShare: AnyObject = NSURL(string: "http://m.baidu.com") as! AnyObject // 创建分享视图控制器
    /*
    activityItems: 分享的内容
    applicationActivities: 分享的类型,默认(nil)时为 UIActivity
    */
    let activityViewController = UIActivityViewController(activityItems: [textToShare, imageToShare, urlToShare],
    applicationActivities: nil) // 设置不出现的分享按钮
    /*
    Activity 类型又分为 “操作” 和 “分享” 两大类: UIActivityCategoryAction 操作:
    UIActivityTypeAirDrop AirDrop AirDrop
    UIActivityTypePrint 打印 Print UIActivityTypeSaveToCameraRoll 保存到相册 Save Image
    UIActivityTypeAssignToContact 添加到联系人 AssignToContact
    UIActivityTypeAddToReadingList 添加到 Safari 阅读列表 AddToReadingList
    UIActivityTypeCopyToPasteboard 复制到剪贴板 Copy UIActivityCategoryShare 分享:
    UIActivityTypeMail 邮箱 Mail
    UIActivityTypeMessage 短信 Message UIActivityTypePostToTwitter 分享到 Twitter
    UIActivityTypePostToFacebook 分享到 Facebook
    UIActivityTypePostToVimeo 分享到 Vimeo(视频媒体)
    UIActivityTypePostToFlickr 分享到 Flickr(网络相簿)
    UIActivityTypePostToWeibo 分享到 新浪微博
    UIActivityTypePostToTencentWeibo 分享到 腾讯微博 添加到此数组中的系统分享按钮项将不会出现在分享视图控制器中
    */
    activityViewController.excludedActivityTypes = [UIActivityTypeAssignToContact, UIActivityTypePrint] // 显示分享视图控制器
    self.presentViewController(activityViewController, animated: true, completion: nil) // 分享完成
    activityViewController.completionWithItemsHandler = { activityType, completed, returnedItems, activityError in // 分享完成或退出分享时调用该方法
    print("分享完成")
    }

2、自定义 activityViewController 的创建

  • Objective-C

    • myUIActivity.h

      	@interface myUIActivity : UIActivity
      @end
    • myUIActivity.m

      	/*
      自定义分享按钮
      */ @implementation myUIActivity // 设置分享按钮的类型
      - (NSString *)activityType { // 在 completionWithItemsHandler 回调里可以用于判断,一般取当前类名
      return NSStringFromClass([myUIActivity class]);
      } // 设置分享按钮的标题
      - (NSString *)activityTitle { // 设置显示在分享框里的名称
      return @"myUIActivity";
      } // 设置分享按钮的图片
      - (UIImage *)activityImage { // 图片自定变为黑白色,默认尺寸为 56 * 56 像素
      return [UIImage imageNamed:@"JHQ0228"];
      } // 设置是否显示分享按钮
      - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems { // 这里一般根据用户是否授权等来决定是否要隐藏分享按钮
      return YES;
      } // 预处理分享数据
      - (void)prepareWithActivityItems:(NSArray *)activityItems { // 解析分享数据时调用,可以进行一定的处理
      } // 执行分享
      - (UIViewController *)activityViewController { // 点击自定义分享按钮时调用,跳转到自定义的视图控制器
      return nil;
      } // 执行分享
      - (void)performActivity { // 点击自定义分享按钮时调用
      } // 完成分享
      - (void)activityDidFinish:(BOOL)completed { // 分享视图控制器退出时调用
      } @end
    • ViewController.m

      	// 设置分享的内容
      NSString *textToShare = @"请大家登录《iOS云端与网络通讯》服务网站。";
      UIImage *imageToShare = [UIImage imageNamed:@"swift"];
      NSURL *urlToShare = [NSURL URLWithString:@"http://m.baidu.com"]; // 设置分享的类型
      myUIActivity *myActivity = [[myUIActivity alloc] init]; // 创建分享视图控制器
      UIActivityViewController *activityViewController = [[UIActivityViewController alloc]
      initWithActivityItems:@[textToShare, imageToShare, urlToShare]
      applicationActivities:@[myActivity]]; // 设置不出现的分享按钮
      /*
      添加到此数组中的系统分享按钮项将不会出现在分享视图控制器中
      */
      activityViewController.excludedActivityTypes = @[UIActivityTypeAssignToContact,
      UIActivityTypePrint,
      UIActivityTypeAssignToContact,
      UIActivityTypeAddToReadingList,
      UIActivityTypeCopyToPasteboard]; // 显示分享视图控制器
      [self presentViewController:activityViewController animated:YES completion:nil]; // 分享完成
      activityViewController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed,
      NSArray *returnedItems, NSError *activityError) { // 分享完成或退出分享时调用该方法
      NSLog(@"分享完成");
      };
  • Swift

    • myUIActivity.swift

      	/*
      自定义分享按钮
      */
      class myUIActivity: UIActivity // 设置分享按钮的类型
      override func activityType() -> String? { // 在 completionWithItemsHandler 回调里可以用于判断,一般取当前类名
      return NSStringFromClass(myUIActivity.self)
      } // 设置分享按钮的标题
      override func activityTitle() -> String? { // 设置显示在分享框里的名称
      return "myUIActivity"
      } // 设置分享按钮的图片
      override func activityImage() -> UIImage? { // 图片自定变为黑白色,默认尺寸为 56 * 56 像素
      return UIImage(named: "JHQ0228")
      } // 设置是否显示分享按钮
      override func canPerformWithActivityItems(activityItems: [AnyObject]) -> Bool { // 这里一般根据用户是否授权等来决定是否要隐藏分享按钮
      return true
      } // 预处理分享数据
      override func prepareWithActivityItems(activityItems: [AnyObject]) { // 解析分享数据时调用,可以进行一定的处理
      } // 执行分享
      override func activityViewController() -> UIViewController? { // 点击自定义分享按钮时调用,跳转到自定义的视图控制器
      return nil
      } // 执行分享
      override func performActivity() { // 点击自定义分享按钮时调用
      } // 完成分享
      override func activityDidFinish(completed: Bool) { // 分享视图控制器退出时调用
      }
    • ViewController.swift

      	// 设置分享的内容
      let textToShare = "请大家登录《iOS云端与网络通讯》服务网站。"
      let imageToShare: AnyObject = UIImage(named: "swift") as! AnyObject
      let urlToShare: AnyObject = NSURL(string: "http://m.baidu.com") as! AnyObject // 设置分享的类型
      let myActivity = myUIActivity() // 创建分享视图控制器
      let activityViewController = UIActivityViewController(activityItems: [textToShare, imageToShare, urlToShare],
      applicationActivities: [myActivity]) // 设置不出现的分享按钮
      /*
      添加到此数组中的系统分享按钮项将不会出现在分享视图控制器中
      */
      activityViewController.excludedActivityTypes = [UIActivityTypeAssignToContact,
      UIActivityTypePrint,
      UIActivityTypeAssignToContact,
      UIActivityTypeAddToReadingList,
      UIActivityTypeCopyToPasteboard] // 显示分享视图控制器
      self.presentViewController(activityViewController, animated: true, completion: nil) // 分享完成
      activityViewController.completionWithItemsHandler = { activityType, completed, returnedItems, activityError in // 分享完成或退出分享时调用该方法方法
      print("分享完成")
      }

3、手动执行分享操作

  • Objective-C

    • 打开 URL

      	// 调用 Safari 浏览器打开,系统支持的 URL scheme 包括:mailto://、tel://、sms://、and maps://
      [[UIApplication sharedApplication] openURL:activityItems[2]];
    • 添加到 Safari 阅读列表

      	// 需要包含头文件 #import <SafariServices/SafariServices.h>
      [[SSReadingList defaultReadingList] addReadingListItemWithURL:activityItems[2]
      title:@"百度"
      previewText:@"百度一下,你就知道" error:nil];
    • 保存到相册

      	UIImageWriteToSavedPhotosAlbum(activityItems[1], nil, nil, nil);
    • 发送短信

      	// 需要包含头文件 #import <MessageUI/MessageUI.h> ,遵守协议 <UINavigationControllerDelegate>
      
      	MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc] init];
      messageVC.delegate = self;
      messageVC.recipients = @[@"mattt@nshipster•com"];
      messageVC.body = @"Lorem ipsum dolor sit amet";
      [self presentViewController:messageVC animated:YES completion:nil];
    • 发送邮件

      	// 需要包含头文件 #import <MessageUI/MessageUI.h>
      
      	MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
      [mailVC setToRecipients:@[@"mattt@nshipster•com"]];
      [mailVC setSubject:@"Hello"];
      [mailVC setMessageBody:@"Lorem ipsum dolor sit amet" isHTML:NO];
      [self presentViewController: mailVC animated:YES completion:nil];
    • 发送推文

      	// 需要包含头文件 #import <Twitter/Twitter.h>
      
      	TWTweetComposeViewController *tweetVC = [[TWTweetComposeViewController alloc] init];
      [tweetVC setInitialText:@"Lorem ipsum dolor sit amet."];
      [self presentViewController: tweetVC animated:YES completion:nil];
  • Swift

    • 打开 URL

      	// 调用 Safari 浏览器打开,系统支持的 URL scheme 包括:mailto://、tel://、sms://、and maps://
      UIApplication.sharedApplication().openURL(activityItems[2] as! NSURL)
    • 添加到 Safari 阅读列表

      	// 需要包含头文件 import SafariServices
      SSReadingList.defaultReadingList().addReadingListItemWithURL(activityItems[2] as! NSURL,
      title: "百度",
      previewText: "百度一下,你就知道",
      error: nil)
    • 保存到相册

      	UIImageWriteToSavedPhotosAlbum(activityItems[1] as! UIImage, nil, nil, nil);
    • 发送短信

      	// 需要包含头文件 import MessageUI ,遵守协议 UINavigationControllerDelegate
      
      	var messageVC = MFMessageComposeViewController()
      messageVC.delegate = self
      messageVC.recipients = ["mattt@nshipster•com"]
      messageVC.body = "Lorem ipsum dolor sit amet"
      self.presentViewController(messageVC, animated:true, completion:nil)
    • 发送邮件

      	// 需要包含头文件 import MessageUI
      
      	var mailVC = MFMailComposeViewController()
      mailVC.setToRecipients(["mattt@nshipster•com"])
      mailVC.setSubject("Hello")
      mailVC.setMessageBody("Lorem ipsum dolor sit amet", isHTML:false)
      self.presentViewController(mailVC, animated:true, completion:nil)

iOS - UIActivityViewController的更多相关文章

  1. iOS 6分享列表——UIActivityViewController详解

    iOS 6分享列表——UIActivityViewController详解 2013-06-03 01:42:33     发表评论 在iOS 6之后提供了一个分享列表视图,它通过UIActivity ...

  2. IOS 7 Study - UIActivityViewController(Presenting Sharing Options)

    You want to be able to allow your users to share content inside your apps with theirfriends, through ...

  3. iOS 开发总结(上)

    来源:蝴蝶之梦天使 链接:http://www.jianshu.com/p/d333cf6ae4b0 在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPho ...

  4. iOS 8 Extensions

       本文由海水的味道收集整理,欢迎转载    当前版本 0.0.1  iOS 8 Extensions 一.扩展概述 扩展(Extension)是iOS 8中引入的一个非常重要的新特性.扩展让app ...

  5. iOS - Share 分享/第三方登录

    1.系统方式创建分享 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China.如果不设置此项弹出的分享页面中显示 ...

  6. 利用UIActivityController调用ios系统自带的分享功能,实现微信发布多图的功能

    通过一番查找以后找到一个类UIActivityController,可以调用系统的social.framework中的分享接口.看下面的图就知道了,这个还是挺常见的 微信发布多图 借鉴了CSDN上的一 ...

  7. 李洪强iOS经典面试题128

    1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringEnco ...

  8. iOS 最全面试题

    HTTP/1.0 在HTTP/1.0版本中,并没有官方的标准来规定Keep-Alive如何工作,因此实际上它是被附加到HTTP/1.0协议上,如果客户端浏览器支持Keep-Alive,那么就在HTTP ...

  9. Adding AirDrop File Sharing Feature to Your iOS Apps

    http://www.appcoda.com/ios7-airdrop-programming-tutorial/ Adding AirDrop File Sharing Feature to You ...

随机推荐

  1. android 使用WebView 支持播放优酷视频,土豆视频

    看了很多文章和所谓的解决android WebView播放优酷,土豆等视频的办法,都是什么 setPluginsEnabled,在android 4.x之后都不好使,压根就没这函数,因为android ...

  2. RAC例子

    我个人非常推崇ReactiveCocoa,它就像中国的太极,太极生两仪,两仪生四象,四象生八卦,八卦生万物.ReactiveCocoa是一个高度抽象的编程框架,它真的很抽象,初看你不知道它是要干嘛的, ...

  3. php header()函数设置页面Cache缓存

    header()函数在php的使用很大,下面我来介绍利用它实现页面缓存的一些方法,但使用header前必须注意,在它之前不能任何输出,包括空格. 手册上,我们对于cache都是写着如何设置,以便让代码 ...

  4. MySQL连接字符串总结

    一.MySQL Connector/ODBC 2.50 (MyODBC 2.50)连接方式 1.本地数据库连接 Driver={MySQL};Server=localhost;Option=16834 ...

  5. USB wifi调试笔记

    本文以realtek 8192CU WiFi模块为例,介绍USB wifi在Jelly Bean 4.1的调试笔记. 1.WIFI打不开现象概述 WiFi打不开是指您在UI的settings下选中Wi ...

  6. Xcode中设置按钮在十分钟之内禁用

    btn.enabled=NO;` NSTimer * notificationTimer = [NSTimer scheduledTimerWithTimeInterval:10*60.0 targe ...

  7. ZOJ 3868 - Earthstone: Easy Version

    3868 - Earthstone: Easy Version Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld ...

  8. c#游戏 剪刀石头

    电脑using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace sh ...

  9. asp.net 关闭子窗体 刷新主窗体

    主窗体************************************************************************************ //原窗口保留,以对话框 ...

  10. In Action(SPFA+01背包)

    In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...