• 社交网络编程(1)---UIActivityViewController分享列表


    1、社交网络介绍:

    苹果在iOS 5中集成了Twitter,在iOS 6中又集成了Facebook 和 新浪微博。

    因此,iOS 5中引入的Twitter Framework已被废弃,并被Social Framework代替。

    无论是用户使用社交网络服务,还是开发人员进行开发和测试,都需要在设备上设置社交网络服务的账号信息。

    2、社交网络编程API:

    社交网络编程主要使用Social框架的两个类:SLComposeViewController和SLRequest。

    SLComposeViewController提供撰写社交信息的视图控制器,由iOS 系统提供UI。

    SLRequest封装了HTTP请求,提供了统一的社交网络服务接口,能够直接与社交网络服务通信,没有UI需要自己编写设计。

    其次,除了使用Social框架,我们还有可能用到UIActivityViewController和ACAccount。UIActivityViewController也是iOS 6新内容,它提供了一个分享列表视图控制器。ACAccount是Accounts框架中的一个类,ACAccount对象封装了存储在账户数据库中用户账户信息。ACAccount类配合SLRequest使用。

    iOS6分享列表---- UIActivityViewController

    iOS6之后提供了一个分享列表视图,它通过UIActivityViewController管理。苹果公司设计它的目的是替换分享动作选单(ActionSheet),分享动作选单是出于分享目的的动作选单。

    1

     

    (iPhone上的分享动作选单)                                  (iPad上的分享动作选单)

    通过动作选单上的选择按钮,可以把图片分享给别人(分享内容单一)

    但是随着iOS功能的不断增加,需要分享的内容越来越多,它会以模态视图方式呈现。iPad设备的分享列表,它会以Popover视图方式呈现。

    2

     

    (UIActivityViewController在iPhone下效果)         (UIActivityViewController在iPad下效果)

    从图中可以看出分享列表中可以有很多页,每页有9个应用,可以左右滑动翻页,这样就可以共享更多的内容了。

    内置活动列表项

    分享列表使用UIActivityViewController来控制它的呈现和关闭,凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。

    下面我们通过一个实例介绍一下使用UIActivityViewController管理内置活动列表项,这个实例点击左画面工具栏中的Action按钮,会弹出分享列表模态视图(中图所示),如果我们选择了微博,会弹出微博撰写对话框(右图所示),可以在这里撰写微博,完成之后可以点击“发送”按钮发送微博,如果没有在系统设置中没有设置微博账户信息,则会有提示对话框。

    3

    我们下面介绍一下代码实现部分,代码参考ViewController.m的shareAction:方法:

     1 - (IBAction)shareAction:(id)sender {
     2 
     3 NSURL *urlToShare = [NSURL URLWithString:@"http://iosshare.cn/"]; ①
     4 
     5 NSArray *activityItems = @[urlToShare];
     6 
     7 BookActivity *bookActivity = [BookActivity new];  ②
     8 
     9 NSArray *applicationActivities = @[bookActivity];
    10 
    11 UIActivityViewController *activityVC = [[UIActivityViewController alloc]
    12 
    13 initWithActivityItems:activityItems
    14 
    15 applicationActivities:applicationActivities];  ③
    16 
    17 [self presentViewController:activityVC animated:YES completion:nil];
    18 
    19 }
    View Code

    后面选择微博,以及发送微博这些全部是UIActivityViewController给我们封装好的,我们不需要编写一行代码!

    自定义活动列表项

    有的时候根据我们共享内容不同,需要自动定义活动列表项。例如:你的应用是一个观看视频的应用,那么你可能需要共享视频到“优酷”视频网站。下面这一节我们介绍自定义活动列表项。

    凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。这包括了iOS系统通过内置的9个活动列表,也可以是我们自定义的列表项。

    下面我们通过一个实例介绍一下使用UIActivityViewController管理自定义活动列表项,点击左画面工具栏中的Action按钮,会弹出分享列表模态视图,其中列表中“打开Book”是我们自定义列表项,点击“打开Book”列表项执行一些操作,这里的操作是打开Book网站。

    4

    我们下面介绍一下代码实现部分,代码参考ViewController.m的shareAction:方法:

     1 - (IBAction)shareAction:(id)sender {
     2 
     3 NSURL *urlToShare = [NSURL URLWithString:@"http://iosshare.cn/"]; ①
     4 
     5 NSArray *activityItems = @[urlToShare];
     6 
     7 BookActivity *bookActivity = [BookActivity new];  ②
     8 
     9 NSArray *applicationActivities = @[bookActivity];
    10 
    11 UIActivityViewController *activityVC = [[UIActivityViewController alloc]
    12 
    13 initWithActivityItems:activityItems
    14 
    15 applicationActivities:applicationActivities];  ③
    16 
    17 [self presentViewController:activityVC animated:YES completion:nil];
    18 
    19 }
    View Code

    shareAction:方法与上一节内置活动列表项类似,在本例中我们只需要一个数据项(即提供URL),第①行代码就是提供了URL。第②行代码实例化活动列表项BookActivity,然后需要把它放到一个NSArray集合中。第③行代码实例化UIActivityViewController对象,构造方法中applicationActivities部分参数在内置活动列表项为nil,在自定义活动列表项中是指定自定义活动列表项对象集合,就是NSArray集合。

    自定义活动列表项代码实现BookActivity.h的代码如下:

    #import <UIKit/UIKit.h>
    
     
    
    @interface BookActivity : UIActivity
    
     
    
    @property (nonatomic,strong) NSURL *url;
    
     
    
    @end
    View Code

    自定义活动列表项必须继承UIActivity,属性url提供列表项服务的数据项【属性中记录要分享的数据】。BookActivity.m的代码如下:

    @implementation BookActivity
    
     
    
    - (NSString *)activityType  {
    
    return NSStringFromClass([self class]); ①
    
    }
    
     
    
    - (NSString *)activityTitle {
    
    return NSLocalizedStringFromTable(@”Open Book”, @”BookActivity”, nil);  ②
    
    }
    
     
    
    - (UIImage *)activityImage {
    
    return [UIImage imageNamed:@"Book"]; ③
    
    }
    
     
    
    - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
    
    for (id activityItem in activityItems) { ④
    
    if ([activityItem isKindOfClass:[NSURL class]]) { ⑤
    
    if ([[UIApplication sharedApplication] canOpenURL:activityItem]) { ⑥
    
    return YES;
    
    }
    
    }
    
    }
    
    return NO;
    
    }
    
     
    
    - (void)prepareWithActivityItems:(NSArray *)activityItems {
    
    for (id activityItem in activityItems) {
    
    if ([activityItem isKindOfClass:[NSURL class]]) { ⑦
    
    _url = activityItem;  ⑧
    
    }
    
    }
    
    }
    
     
    
    - (void)performActivity {
    
    BOOL completed = [[UIApplication sharedApplication] openURL:_url];  ⑨
    
    [self activityDidFinish:completed];  ⑩
    
    }
    
    @end
    View Code
  • 相关阅读:
    selenium与表格的二三事
    ABP使用Mysql数据库
    Asp.net Mvc 使用EF6 code first 方式连接MySQL总结
    MVC后台数据赋值给前端JS对象
    Entity Framework 6 Code First 实践系列(1):实体类配置总结
    用git extensions clone项目时提示此主机的指纹不是由putty注册的解决办法
    AutoMapper5.0的用法
    StackExchange.Redis helper访问类封装
    Github上十大c#开源项目排行榜
    vs2015使用GIt连接git.oschina.net/
  • 原文地址:https://www.cnblogs.com/yaoxc/p/3720231.html
Copyright © 2020-2023  润新知