En este tutorial del SDK de iOS, demostraré cómo permitir que sus usuarios envíen correos electrónicos sin salir de su aplicación utilizando la clase MFMailComposeViewController. Configuraremos una plantilla de correo electrónico con destinatarios, un asunto, texto del cuerpo e incluso un archivo adjunto de imagen..
El iOS SDK proporciona una interfaz estándar y fácil de usar para permitir a los usuarios enviar y editar correos electrónicos desde su propia aplicación. Para ello, deberá utilizar el MFMailComposeViewController
clase. Este controlador de vista muestra una interfaz de correo estándar y también proporciona la funcionalidad para responder a los eventos de usuario realizados en esa interfaz. Por ejemplo, usted la clase le notificará si el usuario pulsa "enviar" o "cancelar".
Nota: MFMailComposeViewController solo está disponible en iOS 3.0 o posterior.
¿Entonces, cómo funciona? Sigue los pasos en este tutorial para descubrirlo..
Abra Xcode y seleccione "Crear un nuevo proyecto Xcode". Seleccionar Aplicación basada en vista y luego haga clic Siguiente. Ingrese un nombre para su proyecto. Llamé a la mía @? Correo? Ingrese su Identificador de empresa y asegúrese de haber seleccionado "iPhone" para Familia de dispositivos, Porque vamos a hacer una aplicación para iPhone. Si ha terminado, haga clic en Siguiente. Elija un lugar para guardar su proyecto y haga clic en Crear.
яя яAbra el archivo "MailViewController.xib" y arrastre un botón a la vista. Establezca el título del botón en "Correo". Ahora seleccione el botón central del Editor para mostrar el "Editor asistente", de modo que podamos agregar una acción al botón que acabamos de crear..
яя яSeleccione el botón y presione la tecla CTRL para arrastrar a "MailViewController.h". En la ventana emergente que se muestra, ingrese? OpenMail? para nombre y asegúrese de establecer el tipo de conexión en "Acción", porque queremos hacer una acción y no una salida.
яя яEn el área del navegador de Xcode 4, seleccione el nombre del proyecto. A continuación, seleccione el destino actual ("Correo" en este caso), y luego seleccione "Construir fases". lengüeta. Expandir el? Enlace binario con bibliotecas? opción, y luego haga clic en el? +? botón para agregar un nuevo marco. Escriba? Mensaje "en el cuadro de búsqueda y seleccione MensajeUI.framework Opción que aparece en la lista. Haga clic en Agregar? Para incluir este marco en la fase de vinculación de su proyecto..
Ahora que ha agregado el marco de MessageUI a su proyecto, necesita importar ese marco de trabajo en el controlador de vista que usará MFMailComposeViewController
, Entonces, en nuestro caso, MailViewController.h.
Vaya a este archivo y modifique el código para que se lea como sigue:
#importar#importar @interface MailViewController: UIViewController - (IBAction) openMail: (id) remitente; @fin
Como se puede ver, también declaramos la MFMaileComposeViewControllerDelegate
En el código anterior. Usaremos este delegado para ver el resultado del correo..
Arrastre la siguiente imagen a los? Archivos de soporte? Carpeta en tu proyecto. Asegúrese de? Copiar elementos en la carpeta del grupo de destino (si es necesario)? se comprueba antes de hacer clic terminar.
яя яAbra el? MailViewController.m? archivo y desplácese hacia abajo hasta la abrir correo
Acción y modificar el código para leer de la siguiente manera:
- (IBAction) openMail: (id) sender if ([MFMailComposeViewController canSendMail]) else UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Failure" message: @ "Su dispositivo no admite la hoja del compositor" delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [espectáculo de alerta]; [alerta de liberación];
Aquí verificamos si el dispositivo actual puede enviar correo electrónico con el canSendMail
método de clase de MFMailComposeViewController
. Siempre debe llamar a este método antes de abrir la interfaz de correo. Si el dispositivo no puede enviar correos electrónicos, debe notificarlo al usuario (he utilizado un UIAlertView
para esto).
Si el dispositivo puede enviar correo electrónico, mostramos la interfaz de correo. Ve a la abrir correo
Acción y modificar el código para leer de la siguiente manera:
- (IBAction) openMail: (id) sender if ([MFMailComposeViewController canSendMail]) MFMailComposeViewController * mailer = [[MFMailComposeViewController alloc] init]; mailer.mailComposeDelegate = self; [mailer setSubject: @ "Un mensaje de MobileTuts +"]; NSArray * toRecipients = [NSArray arrayWithObjects: @ "[email protected]", @ "[email protected]", nil]; [mailer setToRecipients: toRecipients]; UIImage * myImage = [UIImage imageNamed: @ "mobiletuts-logo.png"]; NSData * imageData = UIImagePNGRepresentation (myImage); [mailer addAttachmentData: imageData mimeType: @ "image / png" fileName: @ "mobiletutsImage"]; NSString * emailBody = @ "¿Has visto el sitio web de MobileTuts +?"; [mailer setMessageBody: emailBody isHTML: NO]; [self presentModalViewController: mailer animated: YES]; [comunicado de correo]; else UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Failure" message: @ "Su dispositivo no admite la hoja de composición" delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [espectáculo de alerta]; [alerta de liberación];
Primero creamos un MFMaileComposeViewController
¿Y llamarlo? Mailer ?. Establecemos el mailComposeDelegate
a sí mismo, para que podamos ver el resultado del correo. El asunto está configurado como "Un mensaje de MobileTuts +". Como puedes ver, la a los destinatarios
es del tipo NSArray
. Esto se debe a que puede agregar varios destinatarios. Agregué dos direcciones de correo electrónico falsas, pero por supuesto puedes poner cualquier dirección que desees. Después de eso, almacenamos una imagen como NSData
objeto, porque no podemos enviar un UIImage
directamente. Luego agregamos el NSData
Objeto como archivo adjunto a nuestro correo electrónico. Establecemos el tipo a una imagen png y el nombre de archivo a "mobiletutsImage". Esto significa que cuando el receptor guarde la imagen, se guardará con el nombre "mobiletutsImage". Lo último que hacemos es mostrar el anuncio de correo antes de liberar el objeto de envío..
Debe cerrar manualmente la interfaz de correo en respuesta a una llamada de método delegado. Agregue el siguiente código debajo de abrir correo
acción:
- (void) mailComposeController: (MFMailComposeViewController *) controller didFinishWithResult: (MFMailComposeResult) error de resultado: (NSError *) error switch (result) case MFMailComposeResultCancelled: NSLog (@ "El correo electrónico cancelado: usted canceló la operación. "); descanso; caso MFMailComposeResultSaved: NSLog (@ "Correo guardado: guardó el mensaje de correo electrónico en la carpeta de borradores."); descanso; caso MFMailComposeResultSent: NSLog (@ "Enviar correo: el mensaje de correo electrónico está en cola en la bandeja de salida. Está listo para enviar."); descanso; caso MFMailComposeResultFailed: NSLog (@ "Correo fallido: el mensaje de correo electrónico no se guardó ni se puso en cola, posiblemente debido a un error."); descanso; predeterminado: NSLog (@ "Correo no enviado"); descanso; // Eliminar la vista de correo [self dismissModalViewControllerAnimated: YES];
En este método de delegado, verificamos el resultado de haber mostrado el controlador de vista de correo con una instrucción de cambio y luego descartamos el controlador de vista con una animación. En el código anterior, simplemente he impreso una NSLog
Mensaje con los resultados, pero el punto es que podría responder dinámicamente a la acción del usuario..
En un iPad se ve bien para mostrar la interfaz de correo en una presentación de hoja de página. Puede hacerlo agregando la siguiente línea de código justo arriba [self presentModalViewController: mailer animated: YES];
:
mailer.modalPresentationStyle = UIModalPresentationPageSheet;яя я
Espero que disfrutes este tutorial. Si tiene algún comentario o solicitud de contenido de iOS adicional de mi parte, deje un comentario a continuación.!