はじめに
こんにちわ、nukkyです。
今回はSNSやメール連携したいときに便利な
「UIActivityViewController」を紹介したいと思います。
実は「UIActivityViewController」でのTwitter連携時のみに
ハッシュタグをつけたかったのですが
これが意外と難航したのでこちらも合わせて紹介したいと思います。
実装
まずはやってみよう
UIActivityViewControllerの使い方は実に簡単
・[Any]を用意してUIActivityViewControllerをインスタンス化
・presentViewControllerで呼び出す
以上です。
本当に最低限のコードだとこんな感じ
1 2 3 4 5 | let text = "text" let items = [text] let activeViewCotntroller = UIActivityViewController(activityItems: items, applicationActivities: nil) present(activeViewCotntroller, animated: true, completion: nil) |
第一引数のactivityItemsですがこちらはAnyの配列が渡せます。
渡せる情報としては以下の三つになります。
・テキスト(String)
・URL(URL)
・画像(UIImage)
つまりURLや画像を渡したい場合は、items変数にURLやUIImageも一緒に入れてやればいいだけです。
さっきのコードにURLと画像を追加で渡す場合以下の様になります。
1 2 3 4 5 6 7 | let text = "text" let sampleUrl = NSURL(string: "http://www.apple.com/")! let image = UIImage(named: "apple")! let items = [text,sampleUrl,image] as [Any] let activeViewCotntroller = UIActivityViewController(activityItems: items, applicationActivities: nil) present(activeViewCotntroller, animated: true, completion: nil) |
ただし連携先によっては渡した情報が表示されない(表示できない)こともあるので注意してください。
Twitter連携時のみにハッシュタグをつけたい
ここでTwitterのみハッシュタグをつけるやり方を紹介したいと思います。
使用するのは「UIActivityItemSource」です。
こちらはprotocolになっており、「UIActivityViewController」で
連携先を選択した際になにを選んだか確認できます。
とりあえず今回はテキスト(String)のパターンのみを考えて以下を作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import UIKit class ActivityText: NSObject, UIActivityItemSource { static let HASH_TAG = " #hoge" var text: String = "" init(text:String) { self.text = text } func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any { return text } func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? { if activityType == UIActivityType.postToTwitter { return text + ActivityText.HASH_TAG } return text } } |
単純に「activityType」からTwitterかどうかを判断し、
Twitterだった場合、returnにハッシュタグを付与しています。
上記の「UIActivityViewController」のサンプルコードの場合
以下の様に呼び出します。
1 2 3 4 5 | let text = "text" let items = [ActivityText(text: text)] let activeViewCotntroller = UIActivityViewController(activityItems: items, applicationActivities: nil) present(activeViewCotntroller, animated: true, completion: nil) |
これでTwitterのみハッシュタグをつけることができました!
さいごに
「UIActivityViewController」はものすごく簡単に実装できるので
ライトなアプリであればかなりオススメです。
今回はTwitterに対する特殊なアクションを組み込みましたが
このやり方を応用すれば色々できるかと思うので、
誰かのお役にたてれば嬉しいです。
試して見たところFB共有の場合は効かないようです。
コメントありがとうございます!
FacebookはアプリからデフォルトのTextを入れてはダメというポリシーがあるようなので、Textは渡せない(渡さない)と考えたほうが良さそうです。
ただ、画像の共有とハッシュタグの付与(ハッシュタグの付与は一つのみ)は可能なので以下のソースでそれらが可能です。