iOS解耦控制器分享功能

現在幾乎每個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.lxweimin.com/p/0e415b7dff55

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容