#はじめに
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
で呼び出し、
showActivityView
が true
の時に表示されるようにします。
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)
}
}
}
これでActivityViewが使えるようになりました!
しかし、真ん中でいい感じに止まるUIではないのでうまくやる方法を知っている方がいたらぜひコメントをください…