文字っぽいの。

文字を書いています。写真も混ざります。

SwiftでUIActivityController(シェアシート)に独自のUIActivityを実装する。

シェアシート内のこれら。

f:id:FromAtom:20150817204110p:plain

こっちの灰色な方を独自実装する方法。Tumblrだと不適切としてフラグを付けるが、ここに独自で作られて入ってる。そんなUIActivityをSwiftで実装する方法。

まず、UIActivityを継承したクラスを作って、いくつかのメソッドをオーバライドする。

class CustomAlertsActivity: UIActivity {
    override func activityTitle() -> String? {
        return "アクティビティの名前"
    }
    
    override func activityImage() -> UIImage? {
        return UIImage(named: "ImageName")
    }
    
    override func activityType() -> String? {
        return "com.example.myapp"
    }
    
    override func canPerformWithActivityItems(activityItems: [AnyObject]) -> Bool {
        // trueを返すと表示される
        // activityItemsの中身をみて、表示するかどうか判断する
        return true
    }
    
    override func prepareWithActivityItems(activityItems: [AnyObject]) {
        // 選択された時の処理を書く
    }
}

使う時はこうやって書く。

let string: String = "なんらかのテキスト"
let url: NSURL = NSURL(string: "http://www.example.com/")!
let activityItems: [AnyObject] = [
    string,
    url
]

let applicationActivities = [
    CustomActivity() // <- 上で作ったやつ
]

let activityViewController = UIActivityViewController(activityItems: activityItems, applicationActivities: applicationActivities)

// 不要なデフォルトアクティビティはここに登録して消す
let excludedActivityTypes = [
    UIActivityTypePrint,
    UIActivityTypeAssignToContact
]

activityViewController.excludedActivityTypes = excludedActivityTypes
presentViewController(activityViewController, animated: true, completion: nil)

簡単。