[SwiftUI] MFMailComposeViewControllerをSwiftUI向けにWrapする

SwiftUI

アプリからメーラを起動して、データを送る機能を作るときによく使うMFMailComposeViewControllerをSwiftUI向けにwrapしてみました。

MFMailComposeViewControllerをWrapするクラス作成

定義は、class MFMailComposeViewController : UINavigationController となっているので、UIViewControllerRepresentableの出番です。

例によって、UIViewControllerRepresentableを継承するstructを作り、
typealias UIViewControllerType = MFMailComposeViewController を記述しました。

記述してから、XCodeに不足しているメソッドのテンプレを作ってもらいました。

Coordinator等作成

MFMailComposeViewControllerのDelegateにもなるCoordinatorを作成して、makeUIViewControllerでMFMailComposeViewControllerを返すときには、coordinatorをセットする。
合わせて、送信先等の設定も行います。

以下のコードは、メールにCSVファイルを添付することを決め打ちして作ったコードです。




使う側

例えば以下のようなコードでボタンを押すと開くようになります。

ハマりやすい点

注意その1
シミュレータは、メールを送れないので、クラッシュします。
メール送信できるかの判断は、以下のコードで可能です。

上記で、disabled設定したり、開くシートを変えたりする必要があります。

注意その2
以下の2つのDelegateがあるので注意

MFMailComposeViewController.delegate
ビュー操作関連のDelegate
MFMailComposeViewController.mailComposeDelegate
メール操作関連のDelegate

送信したとか、キャンセルされたとかは、mailComposeDelegateの方に届くので、delegateだけに設定しているとコールバックされません。




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です