4
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

SwiftUI でShareSheet を表示する方法

はじめに

SwiftUIを使い始めたのですがShareSheet を使う方法があまり見当たらなかったので備忘録的に共有します。

とりあえずView を作る

とりあえずShareボタンとテキスト入力を作りました

struct someView: View {
    @State private var shareItem: String = ""

    var body: some View {
        TextField("type something...", text: $shareItem)
        Button(action: {
            // Action
        }) {
            HStack {
                Text("Share")
                Image(systemName: "square.and.arrow.up")
            }
        }
    }
}

ActivityViewをSwiftUIで使えるようにする

ここではtxtをsomeViewの変数と対応させたいので@Bindingとすることで<Binding>Stringタイプとする。
詳しいことはこのページが参考になります。
Property Wrappersを理解する

struct ShareSheet: UIViewControllerRepresentable {
    @Binding var text: String

    func makeUIViewController(context: Context) -> UIActivityViewController {
        let activityItems: [Any] = [txt]

        let controller = UIActivityViewController(
            activityItems: activityItems,
            applicationActivities: nil)

        return controller
    }

    func updateUIViewController(_ vc: UIActivityViewController, context: Context) {
    }
}

呼び出す

先程の、someView に書き加えてShareSheetを.sheetで呼び出し、
showActivityViewtrueの時に表示されるようにします。
Bindingなので、$をつけて変更ができるようにします。

struct someView: View {
    @State private var showActivityView: Bool = false
    @State private var shareItem: String = ""

    var body: some View {
        TextField("type something...", text: $shareItem)
        Button(action: {
            self.showActivityView = true
        }) {
            HStack {
                Text("Share")
                Image(systemName: "square.and.arrow.up")
            }
        }
        .sheet(isPresented: self.$showActivityView) {
            ShareSheetView(text: $shareItem)
        }
    }
}

Simulator Screen Shot

これでActivityViewが使えるようになりました!
しかし、真ん中でいい感じに止まるUIではないのでうまくやる方法を知っている方がいたらぜひコメントをください…

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
4
Help us understand the problem. What are the problem?