LoginSignup
20
13

More than 1 year has passed since last update.

【SwiftUI】iOS16からシェアの実装がめっちゃ簡単になってた

Last updated at Posted at 2022-11-16

はじめに

iOS16からSWiftUIに新しいUIコンポーネントが追加されました。
その中にShareLinkというものがあったので使ってみたら驚きの簡単さだったので紹介します。

以前の実装方法

このようにUIKitをうまく使わないと使用できませんでした。

import SwiftUI

struct ContentView: View {
    @State var isSharePopover: Bool = false
    var body: some View {
        Button("シェア") {
            share()
        }
        .popover(isPresented: $isSharePopover) {
            ShareView()
        }
    }
    // iPhone: ハーフモーダル
    // iPad: ポップアップ
    func share() {
        if UIDevice.current.userInterfaceIdiom == .pad {
            isSharePopover = true
        } else {
            let link = URL(string: "https://qiita.com/SNQ-2001/items/86646b661ccc4a7a9034")!
            let activityViewController = UIActivityViewController(activityItems: [link], applicationActivities: nil)
            let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene
            let viewController = scene?.keyWindow?.rootViewController
            viewController?.present(activityViewController, animated: true, completion: nil)
        }
    }
}

struct ShareView: UIViewControllerRepresentable {
    func makeUIViewController(context: Context) -> UIActivityViewController {
        let link = URL(string: "https://qiita.com/SNQ-2001/items/86646b661ccc4a7a9034")!
        let activityViewController = UIActivityViewController( activityItems: [link], applicationActivities: nil)
        return activityViewController
    }
    func updateUIViewController(_ vc: UIActivityViewController, context: Context) {
    }
}

ShareLinkを使用すると...

1行で書くことができました!

import SwiftUI

struct ContentView: View {
    var body: some View {
        ShareLink(item: URL(string: "https://qiita.com/SNQ-2001/items/45f30b8b757e3e4fae5a")!)
    }
}

スクリーンショット 2022-11-16 19.25.39.png

ラベルをカスタマイズする

import SwiftUI

struct ContentView: View {
    var body: some View {
        ShareLink(item: URL(string: "https://qiita.com/SNQ-2001/items/45f30b8b757e3e4fae5a")!) {
            Text("シェアボタン")
        }
    }
}

スクリーンショット 2022-11-16 19.29.29.png

SharePreviewをカスタマイズする

スクリーンショット 2022-11-16 19.33.00.png

import SwiftUI

struct ContentView: View {
    var body: some View {
        ShareLink(item: URL(string: "https://qiita.com/SNQ-2001/items/45f30b8b757e3e4fae5a")!, preview: SharePreview("ここがシェアプレビューです", icon: Image(systemName: "wind.snow")))
    }
}

スクリーンショット 2022-11-16 19.35.50.png

おわり

SwiftUIがどんどん便利になってますね
次はWebViewあたりを対応して欲しいですね〜

20
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
13