struct messageView: View {
@State private var showMessageComposer = false
var body: some View {
Button("Send Message") {
showMessageComposer = true
// let phoneToCall: String = "sms: 201016588557"
// let phoneToCallEncoded = phoneToCall.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
// let url = URL(string: phoneToCallEncoded!)
//
UIApplication.shared.open(url!)
}
.sheet(isPresented: $showMessageComposer) {
MessageComposeView(
recipients: ["1234567890"],
bodyText: "Hello!",
attachmentData: UIImage(named: "exampleImage")?.pngData(),
attachmentType: "public.png",
attachmentFilename: "exampleImage.png"
)
}
}
}
struct MessageComposeView: UIViewControllerRepresentable {
@Environment(\.presentationMode) var presentation
var recipients: [String] = []
var bodyText: String = ""
var attachmentData: Data?
var attachmentType: String = ""
var attachmentFilename: String = ""
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func makeUIViewController(context: Context) -> MFMessageComposeViewController {
// Perform swizzling
// MFMessageComposeViewController.swizzleImplementation
let vc = MFMessageComposeViewController()
vc.messageComposeDelegate = context.coordinator
vc.recipients = recipients
vc.body = bodyText
// Create a simple orange image
let size = CGSize(width: 100, height: 100)
UIGraphicsBeginImageContext(size)
let context = UIGraphicsGetCurrentContext()!
context.setFillColor(
UIColor.orange.cgColor)
context.fill(CGRect(origin: .zero, size: size))
let orangeImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
// Add the orange image as an attachment
if let orangeImageData = orangeImage.pngData() {
vc.addAttachmentData(orangeImageData,
typeIdentifier: "public.png",
filename: "orangeImage.png")
}
// // Add the original attachment if provided
// if let data = attachmentData,
// !attachmentType.isEmpty,
// !attachmentFilename.isEmpty {
// vc.addAttachmentData(data,
// typeIdentifier: attachmentType,
// filename: attachmentFilename)
// }
return vc
}
func updateUIViewController(_ uiViewController: MFMessageComposeViewController,
context: Context) {}
class Coordinator: NSObject, MFMessageComposeViewControllerDelegate {
var parent: MessageComposeView
init(_ parent: MessageComposeView) {
self.parent = parent
}
func messageComposeViewController(_ controller: MFMessageComposeViewController,
didFinishWith result: MessageComposeResult) {
parent.presentation.wrappedValue.dismiss()
}
}
}