UIActivityとは
UIActivityは、画面下からModal(CoverVertical)で出現する、FacebookやTwitterなどのSNS共有やメール添付の機能をアイコン一覧で表示するActivityである。任意の機能やアイコンを追加する場合は、UIActivityを継承したクラスを作成する必要がある。
カスタムUIActivityの作成
UIActivityを継承したクラスには、「表示するタイトル」や「アイコンイメージ」、「ボタンを押したときの動作」などを記述する。下の例は、「Safariで開く」というアイコンと機能をUIActivityに追加した場合のコードである。
import UIKit class SafariActivity: UIActivity { var url: NSURL? = nil // 表示するタイトル override func activityTitle() -> String? { return "Safariで開く" } // 表示するアイコン override func activityImage() -> UIImage? { return nil } // どのようなアイテムが投入された場合に機能が働くかを定義する // 機能が動作する条件の場合には true を返す override func canPerformWithActivityItems(activityItems: [AnyObject]) -> Bool { for activityItem in activityItems { // NSURLかつURLを開くことが出来る場合は動作する if activityItem.isKindOfClass(NSURL) && UIApplication.sharedApplication().canOpenURL(activityItem as! NSURL) { return true } } return false } // 機能が動作する直前の処理を記す override func prepareWithActivityItems(activityItems: [AnyObject]) { for activityItem in activityItems { if activityItem.isKindOfClass(NSURL){ url = activityItem as? NSURL } } } // 機能のふるまいを記述する override func performActivity() { // SafariでURLを開く UIApplication.sharedApplication().openURL(url!) self.activityDidFinish(true) } }
上記機能を含んだUIActivityを表示するには、以下のように定義したクラスを呼び出す。
// Data Item let items = [NSURL(string: webView.URL!.description)!] // Application Activity let activities = [SafariActivity()] // 上記2つを引数に指定しUIActivityViewControllerを生成 let activityController :UIActivityViewController = UIActivityViewController(activityItems: items, applicationActivities: activities) UIActivityViewControllerを表示 self.presentViewController(activityController, animated: true, completion: nil)
以上でカスタムのUIActivityを表示することが可能となった。