SwiftUI シェアボタン
共有メニュー表示用Viewの定義
UIKitではUIActivityViewControllerを使用して表示するこの共有メニューですが、現状SwiftUIで特に専用のViewがある訳ではないようです。 そのため、UIViewControllerRepresentableプロトコルに準拠させる形でUIActivityViewControllerをSwiftUI上に表示出来るようにします。
struct ActivityView: UIViewControllerRepresentable {
let activityItems: [Any]
let applicationActivities: [UIActivity]?
func makeUIViewController(
context: UIViewControllerRepresentableContext
) -> UIActivityViewController {
return UIActivityViewController(
activityItems: activityItems,
applicationActivities: applicationActivities
)
}
func updateUIViewController(
_ uiViewController: UIActivityViewController,
context: UIViewControllerRepresentableContext
) {
// Nothing to do
}
}
共有メニュー表示
表示の際はsheet()を使用し、先ほど作成したUIViewControllerRepresentableプロトコルに準拠したViewを返すようにすれば共有メニューが表示されます。
@State private var showActivityView: Bool = false
var body: some View {
...
Button(action: {
self.showActivityView = true
}) {
Image(systemName: "square.and.arrow.up")
}
.sheet(isPresented: self.$showActivityView) {
ActivityView(
activityItems: ["abc"],
applicationActivities: nil
)
}
...
}
SwiftUIでViewを画像としてUIActivityを利用してSNSに共有する – Qiita
How can create a share sheet/view with SwiftUI … |Apple Developer Forums