0

I modified this code for MFMailComposeViewController to work with MFMessageComposeViewController. For the most part, it works. However, I am having a problem closing the messaging interface. The problem I am having is that when I tap cancel on the messaging interface nothing happens.

import SwiftUI
import UIKit
import MessageUI

struct MessengerView:  UIViewControllerRepresentable{

@Binding var isShowing: Bool
@Binding var result: Result<MessageComposeResult, Error>?


class Coordinator: NSObject, MFMessageComposeViewControllerDelegate {
    
    @Binding var isShowing: Bool
    @Binding var result: Result<MessageComposeResult, Error>?

    
    init(isShowing: Binding<Bool>,
         result: Binding<Result<MessageComposeResult, Error>?>) {
        _isShowing = isShowing
        _result = result

    }
    
    func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
        defer {
            isShowing = false
        }

        self.result = .success(result)
        controller.dismiss(animated: true, completion: nil)
        
        
       
    }
}

func makeCoordinator() -> Coordinator {
    return Coordinator(isShowing: $isShowing, result: $result)
}

func makeUIViewController(context: UIViewControllerRepresentableContext<MessengerView>) -> MFMessageComposeViewController {
    let vc = MFMessageComposeViewController()
    vc.recipients = ["4085551212"]
    vc.body = "Hello from California!"
    return vc
}

func updateUIViewController(_ uiViewController: MFMessageComposeViewController,
                                context: UIViewControllerRepresentableContext<MessengerView>) {

    }

    }

In Usage:

    var body: some View {
    NavigationView{
        if viewModel.signedIn {
            VStack {
                if MFMessageComposeViewController.canSendText() {
                    Button("Show messenger view") {
                        self.isShowingMailView.toggle()
                    }
                } else {
                    Text("Can't send messages from this device")
                }
                if result != nil {
                    Text("Result: \(String(describing: result))")
                        .lineLimit(nil)
                }
            }
            .sheet(isPresented: $isShowingMailView) {
                MessengerView(isShowing: self.$isShowingMailView, result: self.$result)
            }

code I modified Is there something wrong with my messageComposeViewController

0 Answers0