[解決済み] SwiftでUIActivityViewControllerを使用してテキストや画像を共有する基本的な例
2022-05-03 03:14:27
質問
iOSで他のアプリと共有する方法を知りたいと思い、検索を始めました。その結果、2つの重要な方法があることがわかりました。
-
UIActivityViewController
-
UIDocumentInteractionController
これらの方法とその他の方法を比較すると 今回のSO回答 .
新しいコンセプトを学ぶとき、手始めに基本的な例を見るのが好きなことがよくあります。一度、基本的なセットアップができれば、後で好きなように修正することができます。
に関連したSOの質問が多くあります。
UIActivityViewController
しかし、簡単な例を教えてくださいというものは見つかりませんでした。私はこの方法を学んだばかりなので、以下に私自身の回答を記載します。より良いもの(またはObjective-Cバージョン)を追加するのは自由です。
どのように解決するのですか?
UIActivityViewControllerのサンプルプロジェクト
ストーリーボードに2つのボタンを設定し、それらをビューコントローラーに接続します (以下のコードを参照)。
Assets.xcassetsに画像を追加します。私は"lion"と名付けました。
コード
import UIKit
class ViewController: UIViewController {
// share text
@IBAction func shareTextButton(_ sender: UIButton) {
// text to share
let text = "This is some text that I want to share."
// set up activity view controller
let textToShare = [ text ]
let activityViewController = UIActivityViewController(activityItems: textToShare, applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
// exclude some activity types from the list (optional)
activityViewController.excludedActivityTypes = [ UIActivity.ActivityType.airDrop, UIActivity.ActivityType.postToFacebook ]
// present the view controller
self.present(activityViewController, animated: true, completion: nil)
}
// share image
@IBAction func shareImageButton(_ sender: UIButton) {
// image to share
let image = UIImage(named: "Image")
// set up activity view controller
let imageToShare = [ image! ]
let activityViewController = UIActivityViewController(activityItems: imageToShare, applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
// exclude some activity types from the list (optional)
activityViewController.excludedActivityTypes = [ UIActivity.ActivityType.airDrop, UIActivity.ActivityType.postToFacebook ]
// present the view controller
self.present(activityViewController, animated: true, completion: nil)
}
}
結果
テキストを共有する」をクリックすると左側に、「画像を共有する」をクリックすると右側に結果が表示されます。
注意事項
- iOS 11とSwift 4で再テストしてみました。シミュレーターで数回実行しないと、タイムアウトしてしまうので、うまくいきませんでした。これは、私のコンピュータが遅いからかもしれません。
-
これらの選択肢のいくつかを非表示にしたい場合は
excludedActivityTypes
上のコードに示すように -
を含めない。
popoverPresentationController?.sourceView
の行は、iPad上でアプリを実行したときにクラッシュする原因となります。 -
このため、他のアプリにテキストや画像を共有することはできません。おそらく
UIDocumentInteractionController
を使用します。
こちらもご覧ください
関連
-
IOSラーニングノート「このクラスはxxxのキーバリューコーディングに対応していません」問題解決
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] Xcodeにおけるバージョンとビルドの比較
-
[解決済み] テキストフィールドを移動する方法(次へボタン/完了ボタン)
-
[解決済み] SwiftでURLから画像を読み込む/ダウンロードする
-
[解決済み] Swift 3, 4, 5 で dispatch_after GCD を書くにはどうしたらいいですか?
-
[解決済み] Swiftで文字列をIntに変換する
-
[解決済み】SwiftでUITextView内にプレースホルダーテキストを追加しますか?
-
[解決済み】Swiftでプレースホルダーの文字色を変更する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
制御が非ボイド関数の終了に達する
-
[解決済み] Xcode 12、iOS Simulator用にビルドしても、iOS用にビルドされたオブジェクトファイルでは、アーキテクチャ「arm64」用にリンクされます。
-
[解決済み] Unwind segueは何に使うのか、どう使うのか?
-
[解決済み] IBOutletsはARCのもとで強くなるべきか、弱くなるべきか?
-
[解決済み] UITextViewのマージン/パディングをなくす方法
-
[解決済み] UIDevice uniqueIdentifierは非推奨 - どうしたらいいの?
-
[解決済み] テキストフィールドを移動する方法(次へボタン/完了ボタン)
-
[解決済み] インポート vs #インポート - iOS 7
-
[解決済み] コア・データ エンティティの全インスタンスを削除する最短の方法
-
[解決済み] Swiftで配列に要素を追加する