前言

	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. 为博客启用MetaWeBlog API

    最近想写一个博客系统,主要有以下几点功能. 能够使用Live Writer来发布.修改文章 使用MongoDB作为持久化 对于博客中的图片.CSS.JS文件,使用CDN加速 后期可加上Radis 使用 ...

  2. 15、Jdbc的优化(BeanUtils组件)

    Jdbc的优化! BeanUtils组件 自定义一个持久层的框架 DbUtils组件 案例优化 1. BeanUtils组件 1.1    简介 程序中对javabean的操作很频繁, 所以apach ...

  3. js 判断某个对象是不是dom对象

    <script type="text/javascript">//首先要对HTMLElement进行类型检查,因为即使在支持HTMLElement的浏览器中,类型却是有 ...

  4. dbms_job.submit 单次执行

    DBMS_JOB.SUBMIT用于定时任务,基本用法如下: DBMS_JOB.SUBMIT(:jobno,//job号                                      'yo ...

  5. jquery 判断checkbox是否为空的三种方法

    //方法一: if ($("#checkbox-id")get(0).checked) { // do something } //方法二:也适用于单选按钮 if($('#chec ...

  6. Java学习之路(五)

    1:补充: 使用super也可以调用父类的成员函数  格式 :  super.函数名(); 2:抽象类与抽象函数 抽象函数的定义: 只有函数的定义,没有函数体的函数被称为抽象函数 抽象类的定义: 使用 ...

  7. 使用工具创建Ribbon的按钮

         来自为知笔记(Wiz)

  8. 切分vocab时遇到的问题

    vocab的格式如下所示,每个词和对应100维的向量: </s> 0.004003 0.004419 -0.003830 -0.003278 0.001367 0.003021 0.000 ...

  9. linux Centos 6.5 FTP服务原理及vsfptd的安装、配置(转)

    本篇随笔将讲解FTP服务的原理以及vsfptd这个最常用的FTP服务程序的安装与配置... 一.FTP服务原理 FTP(File Transfer Protocol)是一个非常古老并且应用十分广泛的文 ...

  10. C语言中的库是什么

    在使用tc编写程序时,你或许对其中的*.lib文件产生疑问,这些lib文件有什么用途? 用C 语言编程时,通常要建立一些用户函数.如果这些函数具有通用性,一般的方法是将它们作成头文件,当需要时用“#i ...