透過分享的按鈕,將我們自定義的內容給發出去吧!
在我們在看一些充滿分享資訊的 App 中,例如:拍賣購物 App、圖書 App,或是什麼新聞 App,有時候我們希望我們能夠快速把這些資訊分享出去,而我們也不希望複製或是使用截圖的方式才能夠分享出去。因此,這次教學教大家如何使用原生的 UIActivityViewController ,開啟原生的分享視窗,並且客製化它的內容分享出去。
在這邊我們會使用 UIActivityViewController 來進行我們分享的動作,可以看到我們初始化時,會需要丟入兩個參數:
可以看到這邊是一個 [Any]
,這邊我們可以決定我們想要分享哪些資訊出去,例如字串圖片等等。根據在此這個 Array 中的項目,系統會決定哪些項目要顯示、哪些則不用。
這個參數的類型是 [UIActivity]?
, 此參數可能為 nil
,表示應用程序支持的自定義服務。你可以告訴系統你希望呈現「什麼類型的動作」。假使設定成 nil
的話,那麼所有類型的動作都將會出現在 UIActivityViewController 當中。
接著我們實例化它,並且我們把書籍名稱跟書籍的網址連結放到 activityItems
,並且把 applicationActivities
設為 nil:
let activityViewController = UIActivityViewController(activityItems: [book.name, book.link], applicationActivities: nil)
接著我們只需要 present 這個 activityViewController 即可,讓我們來測試一下:
這邊你會看到好像只能有幾個功能可以使用,複製跟儲存到檔案等等…。但是我們後面在 iPhone 上測試我們可以分享到各個支援的 App 上,例如 Line 、Facebook、Messager 等等,需要額外開啟。
然後我們這邊也可以為我們的 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 上面:
那麼這次教學文章就到這邊結束了,希望大家了解到如何使用 UIActivityViewController 來製作分享的功能,是一個常常會碰到的功能,當然我們也可以客製化我們的 UIActivity 來製作更多更複雜的分享效果。