Skip to content

Instantly share code, notes, and snippets.

@NeilsUltimateLab
Created February 3, 2019 08:18
Show Gist options
  • Select an option

  • Save NeilsUltimateLab/857d1db80f3007c279bb00ceca9c3626 to your computer and use it in GitHub Desktop.

Select an option

Save NeilsUltimateLab/857d1db80f3007c279bb00ceca9c3626 to your computer and use it in GitHub Desktop.
Compose message and present MFMessageComposeViewController
import Foundation
import MessageUI
class MessageComposer: NSObject, MFMessageComposeViewControllerDelegate {
var reciepient: String?
var message: String?
weak var alertPresenter: UIViewController?
convenience init(reciepient: String?, message: String?, alertPresenter: UIViewController? = nil) {
self.init()
self.reciepient = reciepient
self.message = message
self.alertPresenter = alertPresenter
}
var canSendMessage: Bool {
return MFMessageComposeViewController.canSendText()
}
var composedViewController: MFMessageComposeViewController? {
guard canSendMessage else {
print("Application can not send text, so returning...")
self.showAlert()
return nil
}
guard let reciepient = self.reciepient, reciepient.isValidPhoneNumber else {
print("Phone number is not available")
self.showReciepientAlert()
return nil
}
let controller = MFMessageComposeViewController()
controller.messageComposeDelegate = self
controller.recipients = [reciepient]
controller.body = message
return controller
}
func showAlert() {
let alert = UIAlertController.alert(
title: "Cannot Send Message",
message: "Text messaging is not available on this device. Please check the settings on your device.",
action: .cancel())
self.alertPresenter?.showAlert(alert)
}
func showReciepientAlert() {
let alert = UIAlertController.alert(title: "Phone number isn't available", message: nil, action: .cancel())
self.alertPresenter?.showAlert(alert)
}
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
controller.dismiss(animated: true, completion: nil)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment