iOS - UIActivityViewController

前言

    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)
时间: 2024-10-28 21:34:10

iOS - UIActivityViewController的相关文章

iOS 6中通过UIActivityViewController管理分享列表视图

在iOS 6之后提供了一个分享列表视图,它通过UIActivityViewController管理.苹果设计它主要的目的是替换分享动作选单(ActionSheet),分享动作选单是出于分享目的的动作选单. 通过动作选单上的选择按钮,可以把图片分享给别人.但是随着iOS功能的不断增加,需要分享的内容越来越多,它会以模态视图方式呈现.iPad设备的分享列表,它会以Popover视图方式呈现. 从图中可以看出分享列表中可以有很多页,每页有9个应用,可以左右滑动翻页,这样就可以共享更多的内容了. 内置活

iOS 6分享列表——UIActivityViewController详解

在iOS 6之后提供了一个分享列表视图,它通过UIActivityViewController管理.苹果设计它主要的目的是替换分享动作选单(ActionSheet),分享动作选单是出于分享目的的动作选单. 通过动作选单上的选择按钮,可以把图片分享给别人.但是随着iOS功能的不断增加,需要分享的内容越来越多,它会以模态视图方式呈现.iPad设备的分享列表,它会以Popover视图方式呈现. 从图中可以看出分享列表中可以有很多页,每页有9个应用,可以左右滑动翻页,这样就可以共享更多的内容了. 内置活

iOS面试题总结 一

1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringEncoding)encoding;  + (id) stringWithCString: (c*****t char*)nullTerminatedCString               encoding: (NSStringEncoding)encoding  {    NSString  *obj

iOS 开发库(iOS Developer Library)

iOS 开发库(iOS Developer Library) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 以下为详尽部分,如感觉过于冗长,可移步<iOS 开发库概要(iOS Devel

《iOS网络编程与云端应用最佳实践》上线了-源码下载,样章-正式发售了

我的最新作品:<iOS网络编程与云端应用最佳实践>一书正式发售:(欢迎大家到京东.当当.亚马逊购买)    当当   亚马逊   京东 源码和试读章节和大家分享一下! <iOS网络编程与云端应用最佳实践>书籍源码下载地址(免费下载):   http://download.csdn.net/detail/tonny_guan/5419117 试读章节下载地址   http://download.csdn.net/detail/tonny_guan/5419123    可以通过微博在

有感 iOS 应用间通讯 - 空中投放和自定义 Schema

有感 iOS 应用间通讯 - 空中投放和自定义 Schema 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 说明一下,我下面翻译了一个词儿,应用间通讯,这个就这么地了. 如果有需要的,可以在评

社交网络编程API之iOS系统自带分享

社交网络编程API 社交网络编程主要使用iOS提供的Social框架,目前Social框架主要包含两个类: SLComposeViewController 提供撰写社交信息(如微博信息)的视图控制器,有iOS系统提供UI,就是写入要分享内容的小弹出框. SLRequest封装了HTTP请求,提供了同一的请求社交网络服务的接口,能够直接与社交网路服务通信的能力,没有UI需要自己编写设计. 除了Social框架外,还有可能用到UIActivityViewControlelr和ACAccount.UI

iOS UIKit 框架 346 篇文档分类整理 - 预告

iOS UIKit 框架 346 篇文档分类整理 - 预告 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 当前正在进行的是 "iOS Foundation 框架 224 篇相关文档分

iOS - Share 分享/第三方登录

1.系统方式创建分享 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China.如果不设置此项弹出的分享页面中显示的按钮为英文说明. UIActivityViewController 方式创建 // 设置分享的内容 NSString *textToShare = @"请大家登录<iOS云端与网络通讯>服务网站."; UIImage *imageToShare = [UIImage imag