美文网首页基础
iOS解耦控制器分享功能

iOS解耦控制器分享功能

作者: __LuckyPan__ | 来源:发表于2016-12-17 01:20 被阅读65次

    现在几乎每个App都需要实现分享功能,而且该功能通常会散落在不同的控制器中,最平常的方法就是在每个携带该功能的控制器都new一个新的分享页实例,然后将其add到当前控制器的view或者是keyWindow上。
     再加上该功能通常可以分享至多种不同的平台,不同平台的响应方式也不尽相同,综上可以想见,如果每个控制器都写一份分享代码,该是多么的“壮观”景象。

    一、思考

    重新整理分享的过程我们不难发现,其实只需要3步操作就可以完成完整的分享过程。

    1. 调起分享页,选择分享平台。
     2. 组装分享数据,启动分享操作。
     3. 分享结束,并处理结果。

    接下来就分解这三步,看看我们每一步需要做些什么?
    1.分享页:

    1.1. 不同的数据可分享到的平台可能有所区别,所以分享页需要有一个类型,控制展示可分享的平台信息。

    1.2. 用户选择了分享平台应该只有分享页自己最清楚,所以应该有一个当前选中的分享平台信息。

    2.控制器:

    2.1. 只有控制器知道当前的数据能够分享到哪些平台,相应的控制器就需要“告诉”分享页,应该展示哪些可供选择的分享平台。

    2.2. 控制器还需要组装需要分享的数据,用来做实际的分享。

    3.分享并处理结果:

    3.1. 控制器只需要准备数据和处理分享结果就足够了,因此很明显调起分享的过程的代码不应该出现在控制器中,那么出现在哪里呢?

    3.2. ** HPShareManager**是我用来封装调起分享过程的类,它主要做的事情很简单,就是用来根据控制器传入的“待分享数据”和“分享目的地平台”调起响应的数据进行实际分享,并回调处理分享的结果即可。

    3.3. 当然HPShareManager还可以提供一些更细节的操作,如压缩图片,注册SDK信息等。

    二、实现(本文以ShareSDK分享为例)

    1. 分享页:
    分享页实现思路,可以在此定义自己的分享页样式。

    分享页提供的API
    2. 快捷调用:
    快速调起分享页面,使用分类让控制器新增分享功能,便于拆装。
    分类提供的控制API
    3. HPShareManage:
    基本可以API介绍,注释非常详细,不复啰嗦。
    初始化和分享API 便捷分享API 辅助API

    以上方法的实际实现跟正常分享没有太大的差别,有定制需求的在内部完成即可,在此不再赘述。

    完成上面的几个步骤,分享功能分离框架基本完成,接下来就是如何使用了。

    三、 基本使用

    控制器中使用代码简介(已加注释)

    // 给需要分享功能的控制器添加分类头文件
    #import "UIViewController+HPShareManager.h"
    
    /**************************** 调用代码 ****************************/
    // 1. 使用分类方法调起分享页,当用户选择了目的地平台后回调completionBlock
    [self share:HPShareUITypeNormal completion:^(SSDKPlatformType platformType {
    
          // 2. 准备待分享的数据
          NSURL *shareURL = @"待分享的链接地址;
          NSString *content = @"待分享的文字";
          NSString *title = @"待分享的标题";
          UIImage *shareImage = @"待分享的图片";
    
          // 3. 正式调起SDK分享功能
          [HPShareManager shareParamsWithTitle:title  text:content url:shareURL images:shareImage  forPlatformSubType:platformType onStateChanged:^(SSDKResponseState state, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error)  {
    
              // 4. 处理分享结果
              if(state == SSDKResponseStateSuccess)  {
                    // 成功处理回调
                } else if (state == SSDKResponseStateFail) {
                    // 失败处理回调
                }
            }];
        }];
    

    简单的几个方法调用就实现了给控制器新增分享的功能,极大的减少了代码的耦合和重复,非常值得一试。

    that's all,一个简单却实用的“解耦控制器分享功能”就实现了,希望大家喜欢。
    转载请注明出处
    http://www.jianshu.com/p/0e415b7dff55

    相关文章

      网友评论

        本文标题:iOS解耦控制器分享功能

        本文链接:https://www.haomeiwen.com/subject/mlnnmttx.html