开发者社区> QianChia> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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 开始的一个十分有用的控件,可以十分方便的将文字、图片等内容进行分享,比如分享到微信、新浪微博、发邮件、发短信等。
+关注继续查看

前言

    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 7 UI 过渡指南 - 开始之前(iOS 7 UI Transition Guide - Before You Start)
iOS 7 UI Transition Guide Preparing for Transition Before You Start Scoping the Project Supporting iOS 6 Updating the UI Appearance and Behavi...
930 0
iOS 7 UI 过渡指南 - 界定范围(iOS 7 UI Transition Guide - Scoping the Project)
iOS 7 UI Transition Guide Preparing for Transition Before You Start Scoping the Project Supporting iOS 6 Updating the UI Appearance and Behavior ...
714 0
iOS 7 UI 过渡指南 - 支持续 iOS 6(iOS 7 UI Transition Guide - Supporting iOS 6)
iOS 7 UI Transition Guide Preparing for Transition Before You Start Scoping the Project Supporting iOS 6 Updating the UI Appearance and Behavior B...
1213 0
4 年 iOS 开发,自述这几年的工作感悟,希望对你有帮助!
前言: 从做 iOS 开发一开始到现在,我也已经工作了那么多年了,说一下现在我工作了这么长时间的感悟。 1,接触 作为一个 iOS 开发工程师,我之前做过 iOS 但是还做过一段安卓,都说安卓是 iOS 的基础,这个应该算是正常的。
1217 0
【iOS 开发】Controller 之间使用代理传值
Controller 传值 控制器之间经常需要互相传递值,第一个控制器(简称 MasterVC)在通过 NavigationController Push 第二个控制器(简称 DetailVC)的时候,可以捕获到 DetailVC,所以可以设定后者的变量。
730 0
IOS开发准备工作
1. Register as a developer athttps://developer.apple.com/devcenter/ios/index.action   2. Install XCode      Launch Xcode from the Developer/Applications folder.
653 0
+关注
QianChia
树的芳香由风决定,人生的芳香由自己决定!
222
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载