În acest tutorial pentru iOS SDK, voi demonstra cum să permiteți utilizatorilor să trimită e-mailuri fără a lăsa aplicația utilizând clasa MFMailComposeViewController. Vom configura un șablon de e-mail cu destinatari, un subiect, un text și chiar un atașament de imagine.
SDK-ul iOS oferă o interfață standard ușor de utilizat, care permite utilizatorilor să trimită și să editeze e-mailuri din propria aplicație. Pentru a face acest lucru, va trebui să utilizați MFMailComposeViewController
clasă. Acest controler de vizualizare afișează o interfață standard de poștă și oferă, de asemenea, funcționalitatea pentru a răspunde la evenimentele utilizatorilor efectuate pe acea interfață. De exemplu, clasa vă va notifica dacă utilizatorul a lovit "trimite" sau "anula".
Notă: MFMailComposeViewController este disponibil numai pe iOS 3.0 sau o versiune ulterioară.
Deci, cum funcționează? Urmați pașii din acest tutorial pentru a afla.
Deschideți Xcode și selectați? Creați un nou proiect Xcode ?. Selectați Vizualizare bazată pe aplicație apoi faceți clic pe Următor →. Introduceți un nume pentru proiectul dvs. Am sunat pe mine @? Mail ?. Introduceți identificatorul companiei și asigurați-vă că ați selectat "iPhone" pentru Familia de dispozitive, pentru că vom face o aplicație iPhone. Dacă ați terminat, faceți clic pe Următor →. Alegeți un loc pentru a vă salva proiectul și faceți clic pe Crea.
яя яDeschideți fișierul "MailViewController.xib" și trageți un buton în vizualizare. Setați titlul butonului la "Mail". Acum, selectați butonul din mijloc al editorului pentru a afișa editorul "Asistent", astfel încât să putem adăuga o acțiune la butonul pe care tocmai l-am creat.
яя яSelectați butonul și trageți CTRL la "MailViewController.h". În fereastra pop-up afișată, introduceți? OpenMail? pentru numele și asigurați-vă că ați setat tipul de conexiune la "Acțiune", pentru că vrem să facem o acțiune și nu o priză.
яя яÎn zona de navigare din Xcode 4, selectați numele proiectului. Apoi, selectați țintă curentă (? Mail? În acest caz), apoi selectați "Construiți fazele?" tab. Extindeți linia binară cu biblioteci? , apoi faceți clic pe butonul? +? pentru a adăuga un cadru nou. Introduceți mesajul "în" caseta de căutare și selectați MessageUI.framework care apare în listă. Faceți clic pe? Adăugați? pentru a include acest cadru în faza de legătură a proiectului dvs..
Acum că ați adăugat cadrul MessageUI în proiectul dvs., trebuie să importați acel cadru în controlerul de vizualizare care va utiliza MFMailComposeViewController
, deci, în cazul nostru, MailViewController.h.
Accesați acest fișier și modificați codul astfel:
#import#import @ interfață MailViewController: UIViewController - (IBAction) openMail: (id) expeditor; @Sfârșit
După cum puteți vedea, am declarat de asemenea MFMaileComposeViewControllerDelegate
în codul de mai sus. Vom folosi acest delegat pentru a vedea rezultatul mesajului.
Glisați următoarea imagine în fișierele de susținere? dosar în proiectul dvs. Asigurați-vă că? Copiați articolele în dosarul grupului de destinație (dacă este necesar)? este verificată înainte de a face clic finalizarea.
яя яDeschideți? MailViewController.m? fișier și derulați în jos până la openMail:
acțiune și modificați codul după cum urmează:
- (IBAction) openMail: (id) expeditor if ([MFMailComposeViewController canSendMail]) else UIAlertView * alert = [UIAlertView alloc] initWithTitle: @ mesajul "Failure": @ "Aparatul nu suporta foaia compozitorului" delegat: nil cancelButtonTitle: @ "OK" altButtonTitle: nil]; [alertă spectacol]; [release release];
Aici verificăm dacă dispozitivul curent poate trimite e-mail cu canSendMail
clasă de MFMailComposeViewController
. Trebuie să apelați întotdeauna această metodă înainte de a deschide interfața de e-mail. Dacă dispozitivul nu poate trimite poștă electronică, ar trebui să îl notificați pe utilizator (am folosit un mesaj UIAlertView
pentru asta).
Dacă dispozitivul poate trimite poștă electronică, afișăm interfața de e-mail. Mergeți la openMail:
acțiune și modificați codul după cum urmează:
- (IBAction) openMail: (id) expeditor dacă ([MFMailComposeViewController canSendMail]) MFMailComposeViewController * mailer = [[MFMailComposeViewController alloc] init]; mailer.mailComposeDelegate = auto; [mailer setSubject: @ "Un mesaj de la MobileTuts +"]; NSArray * toRecipients = [NSArray arrayWithObjects: @ "[email protected]", @ "[email protected]", nil]; [setul de e-mail al destinatarilor: laRecipienți]; UIImage * myImage = [UIImage imageNamed: @ "mobiletuts-logo.png"]; NSData * imageData = UIImagePNGRpresentation (myImage); [mailer addAttachmentData: imagineData mimeType: @ "image / png" NumeNumele: @ "mobiletutsImage"]; NSString * emailBody = @ "Ați văzut site-ul Web MobileTuts +?"; [mailer setMessageBody: emailBody este HTML: NU]; [auto prezentModalViewController: mailer animat: DA]; [release of mailer]; altceva UIAlertView * alert = [UIAlertView alloc] initWithTitle: @ Mesajul "Failure": @ "Dispozitivul dvs. nu acceptă foaia compozitorului": null cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertă spectacol]; [release release];
Mai intai creem a MFMaileComposeViewController
și o numiți "mailer". Am setat mailComposeDelegate
la sine, astfel încât să putem vedea rezultatul e-mailului. Subiectul este setat la "Un mesaj de la MobileTuts +?". După cum puteți vedea, toRecipients
este de tip NSArray
. Acest lucru se datorează faptului că puteți adăuga mai mulți destinatari. Am adăugat două adrese false de e-mail, dar, bineînțeles, puteți pune orice adresă doriți. După aceea, stocăm o imagine ca o NSData
obiect, pentru că nu putem trimite a UIImage
direct. Apoi adăugăm NSData
obiect ca atașament la e-mailul nostru. Am setat tipul la o imagine png și numele fișierului la "mobiletutsImage". Aceasta înseamnă că atunci când receptorul salvează imaginea, acesta va fi salvat sub numele "mobiletutsImage". Ultimul lucru pe care îl facem este să arătăm poșta electronică înainte de eliberarea obiectului mailer.
Trebuie să renunțați manual la interfața de e-mail ca răspuns la apelul unei metode delegate. Adăugați următorul cod sub openMail:
acțiune:
- (void) mailComposeController: (MFMailComposeViewController *) controler didFinishWithResult: (MFMailComposeResult) eroare de rezultat: (NSError *) eroare comutare (rezultat) caz MFMailComposeResultCancelled: NSLog (@ „); pauză; cazul MFMailComposeResultSaved: NSLog (@ "E-mail salvat: ați salvat mesajul de e-mail în dosarul proiectelor."); pauză; cazul MFMailComposeResultSent: NSLog (@ "Trimiteți prin e-mail: mesajul e-mail este în coada de așteptare în căsuța de ieșire și este gata să trimită."); pauză; cazul MFMailComposeResultFailed: NSLog (@ "Mail nu a reușit: mesajul e-mail nu a fost salvat sau în coadă, posibil din cauza unei erori."); pauză; implicit: NSLog (@ "Mesajul nu a fost trimis."); pauză; // Eliminați vizualizarea de e-mail [self dismissModalViewControllerAnimated: YES];
În această metodă delegat, verificăm rezultatul afișării controlerului de vizualizare a corespondenței cu o instrucțiune de comutare și apoi respingerea controlerului de vizualizare cu o animație. În codul de mai sus, am tipărit pur și simplu un NSLog
mesaj cu rezultatele, dar punctul este că ați putea răspunde dinamic la acțiunea utilizatorului.
Pe un iPad este bine să arătați interfața de corespondență într-o prezentare a foii de pagină. Puteți face acest lucru adăugând următoarea linie de cod chiar deasupra [auto prezentModalViewController: mailer animat: DA];
:
mailer.modalPresentationStyle = UIModalPresentationPageSheet;яя я
Sper că ți-a plăcut acest tutorial. Dacă aveți feedback sau solicitări pentru conținut suplimentar de iOS de la mine, vă rugăm să lăsați un comentariu de mai jos!