iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
0
自我挑戰組

一天一蘋果,Bug 遠離我。系列 第 13

Day 13: 把有興趣的書分享出去吧!

透過分享的按鈕,將我們自定義的內容給發出去吧!

https://ithelp.ithome.com.tw/upload/images/20181028/20107701hCKXYlScJ7.png

前言:

在我們在看一些充滿分享資訊的 App 中,例如:拍賣購物 App、圖書 App,或是什麼新聞 App,有時候我們希望我們能夠快速把這些資訊分享出去,而我們也不希望複製或是使用截圖的方式才能夠分享出去。因此,這次教學教大家如何使用原生的 UIActivityViewController ,開啟原生的分享視窗,並且客製化它的內容分享出去。


#UIActivityViewController

在這邊我們會使用 UIActivityViewController 來進行我們分享的動作,可以看到我們初始化時,會需要丟入兩個參數:

https://ithelp.ithome.com.tw/upload/images/20181028/20107701Wpowcs1lPl.png

  • activityItems

可以看到這邊是一個 [Any],這邊我們可以決定我們想要分享哪些資訊出去,例如字串圖片等等。根據在此這個 Array 中的項目,系統會決定哪些項目要顯示、哪些則不用。

https://ithelp.ithome.com.tw/upload/images/20181028/20107701xSPUUE9NXE.png

  • applicationActivities

這個參數的類型是 [UIActivity]?, 此參數可能為 nil,表示應用程序支持的自定義服務。你可以告訴系統你希望呈現「什麼類型的動作」。假使設定成 nil 的話,那麼所有類型的動作都將會出現在 UIActivityViewController 當中。

接著我們實例化它,並且我們把書籍名稱跟書籍的網址連結放到 activityItems ,並且把 applicationActivities 設為 nil:

let activityViewController = UIActivityViewController(activityItems: [book.name, book.link], applicationActivities: nil)

接著我們只需要 present 這個 activityViewController 即可,讓我們來測試一下:

https://ithelp.ithome.com.tw/upload/images/20181028/20107701O1xqU2TOqk.png

這邊你會看到好像只能有幾個功能可以使用,複製跟儲存到檔案等等…。但是我們後面在 iPhone 上測試我們可以分享到各個支援的 App 上,例如 Line 、Facebook、Messager 等等,需要額外開啟。

https://ithelp.ithome.com.tw/upload/images/20181028/20107701rmkiAOekXT.png

然後我們這邊也可以為我們的 activityViewController 新增一個 completionWithItemsHandler,來獲取他處理資料的結束後的結果,所以我們這邊分享按鈕的完整程式碼如下:

@IBAction func shareBookInfo(_ sender: UIBarButtonItem) {
    guard let book = book else {
        // 若是獲取不了書籍資料,跳出 alertController
        // 這邊的 showAlert 是我們自訂的跳出 alertContrller 的方法
        self.showAlert(title: "Fail", message: "獲取書籍資料失敗,請重新進入畫面")
        return
    }
    // 初始化 UIActivityViewController,並將書名跟網址連結作為 activityItems,也就是要分享的資料
    let activityViewController = UIActivityViewController(activityItems: [book.name, book.link], applicationActivities: nil)
    // 新增一個 .completionWithItemsHandler
    activityViewController.completionWithItemsHandler = {(activityType: UIActivity.ActivityType?, completed: Bool, returnedItems: [Any]?, error: Error?) in
        // 這邊我們只判斷是否有錯誤產生
        // 這邊也能夠判斷是分享的種類是什麼
        if error != nil {
            self.showAlert(title: "Error", message: "錯誤提示\n:\(error!.localizedDescription)")
            return
        }
        if completed {
            self.showAlert(title: "Success", message: "分享成功!")
        }
    }
    self.present(activityViewController, animated: true, completion: nil)
  }

接著讓我們測試一下分享功能吧,這邊我們試著分享到 Line 上面:

image


後記:

那麼這次教學文章就到這邊結束了,希望大家了解到如何使用 UIActivityViewController 來製作分享的功能,是一個常常會碰到的功能,當然我們也可以客製化我們的 UIActivity 來製作更多更複雜的分享效果。


上一篇
Day 12: 讓你的 Cell 動起來吧!
下一篇
Day 14: 使用製作一個切換顯示模式的方法!
系列文
一天一蘋果,Bug 遠離我。30

尚未有邦友留言

立即登入留言