I denne veiledningen for iOS SDK demonstrerer jeg hvordan du lar brukerne sende e-post uten å forlate programmet ved hjelp av klassen MFMailComposeViewController. Vi vil sette opp en e-postmal med mottakere, et emne, kroppstext og til og med et bildevedlegg.
IOS SDK gir et brukervennlig, standardgrensesnitt som lar brukerne sende og redigere e-post fra din egen applikasjon. For å gjøre dette må du bruke MFMailComposeViewController
klasse. Denne visningen kontrolleren viser et standard mail grensesnitt og gir også funksjonaliteten til å svare på bruker hendelser utført på dette grensesnittet. For eksempel vil du varsle deg om brukeren trykker "send" eller "avbryt".
Merk: MFMailComposeViewController er bare tilgjengelig på iOS 3.0 eller nyere.
Så, hvordan fungerer det? Følg trinnene i denne veiledningen for å finne ut.
Åpne Xcode og velg? Opprett et nytt Xcode-prosjekt ?. Å velge Visbasert applikasjon og klikk deretter neste. Skriv inn et navn for prosjektet ditt. Jeg ringte min @? Mail ?. Skriv inn din firmaidentifikator og kontroller at du valgte "iPhone" for Enhetsfamilie, fordi vi skal lage en iPhone-app. Hvis du er ferdig, klikk neste. Velg et sted for å lagre prosjektet ditt og klikk Skape.
яя яÅpne filen "MailViewController.xib" og dra en knapp i visningen. Sett tittelen på knappen til "Mail". Velg nå midtknappen til redaktøren for å vise? Assistent editor ?, så vi kan legge til en handling til knappen vi nettopp har opprettet.
яя яVelg knappen og CTRL-dra til? MailViewController.h ?. I popup-vinduet som vises, skriv inn? OpenMail? for navn og sørg for å sette tilkoblingstypen til? Handling?, fordi vi vil gjøre en handling og ikke et uttak.
яя яI navigatorområdet til Xcode 4 velger du prosjektnavnet. Velg deretter det nåværende målet (? Mail? I dette tilfellet), og velg deretter? Byggfaser? fane. Utvid? Link binær med biblioteker? alternativet, og klikk deretter på? +? knappen for å legge til et nytt rammeverk. Skriv? Melding "i søkeboksen, og velg MessageUI.framework alternativet som vises i listen. Klikk? Legg til? å inkludere dette rammeverket i lenkefasen av prosjektet ditt.
Nå som du har lagt til MessageUI-rammen i prosjektet ditt, må du importere det rammeverket til visningen kontrolleren som vil bruke MFMailComposeViewController
, så, i vårt tilfelle, MailViewController.h.
Gå til denne filen og endre koden for å lese som følger:
#importere#importere @interface MailViewController: UIViewController - (IBAction) Openmail: (id) sender; @slutt
Som du kan se, erklærte vi også MFMaileComposeViewControllerDelegate
i ovennevnte kode. Vi vil bruke denne delegaten til å se resultatet av posten.
Dra følgende bilde til? Støttende filer? mappe i prosjektet ditt. Pass på? Kopier elementer til destinasjonsgruppens mappe (om nødvendig)? er merket før du klikker bli ferdig.
яя яÅpne? MailViewController.m? fil og bla ned til Openmail:
handling og endre koden for å lese som følger:
- (IBAction) openMail: (id) avsender if ([MFMailComposeViewController canSendMail]) annet UIAlertView * alert = [[UIAlertView-tildeling] initWithTitle: @ "Feil" -melding: @ "Enheten støtter ikke komponentarket" delegere: null avbrytButtonTitle: @ "OK" otherButtonTitles: null]; [varslingsutstilling]; [våken utgivelse];
Her kontrollerer vi om den nåværende enheten kan sende e-post med canSendMail
klasse metode av MFMailComposeViewController
. Du bør alltid ringe denne metoden før du åpner e-postgrensesnittet. Hvis enheten ikke kan sende e-post, bør du varsle brukeren (jeg har brukt en UIAlertView
for dette).
Hvis enheten kan sende e-post, viser vi e-postgrensesnittet. Gå til Openmail:
handling og endre koden for å lese som følger:
- (IBAction) openMail: (id) avsender if ([MFMailComposeViewController canSendMail]) MFMailComposeViewController * mailer = [[MFMailComposeViewController alloc] init]; mailer.mailComposeDelegate = selv; [mailer setSubject: @ "En melding fra MobileTuts +"]; NSArray * toRecipients = [NSArray arrayWithObjects: @ "[email protected]", @ "[email protected]", null]; [mailer setToRecipients: toRecipients]; Ullmage * myImage = [UIImage imageNamed: @ "mobiletuts-logo.png"]; NSData * imageData = UIImagePNGRepresentation (myImage); [mailer addAttachmentData: imageData mimeType: @ "image / png" fileName: @ "mobiletutsImage"]; NSString * emailBody = @ "Har du sett MobileTuts + nettsiden?"; [mailer setMessageBody: emailBody isHTML: NO]; [self presentModalViewController: mailer animated: YES]; [mailer release]; ellers UIAlertView * alert = [[UIAlertView-tildeling] initWithTitle: @ "Feil" -melding: @ "Enheten støtter ikke komponentarket" delegat: null annullerButtonTitle: @ "OK" otherButtonTitles: null]; [varslingsutstilling]; [våken utgivelse];
Først oppretter vi en MFMaileComposeViewController
og kaller det? mailer ?. Vi satte mailComposeDelegate
til selv, så vi kan se resultatet av posten. Faget er satt til? En melding fra MobileTuts + ?. Som du kan se, er toRecipients
er av typen NSArray
. Dette skyldes at du kan legge til flere mottakere. Jeg har lagt til to falske e-postadresser, men selvfølgelig kan du legge til hvilken adresse du liker. Deretter lagrer vi et bilde som en NSData
objekt, fordi vi ikke kan sende en UIImage
direkte. Da legger vi til NSData
objekt som et vedlegg til vår e-post. Vi stiller typen til et png-bilde og filenavn til? MobiletutsImage ?. Dette betyr at når mottakeren sparer bildet, blir det lagret under navnet "mobiletutsImage". Den siste tingen vi gjør er å vise e-postøren før du frigjør e-postobjektet.
Du må manuelt avvise e-postgrensesnittet som svar på en delegatmetodeanrop. Legg til følgende kode under Openmail:
handling:
- (void) mailComposeController: (MFMailComposeViewController *) kontrolleren didFinishWithResult: (MFMailComposeResult) resultatfeil: (NSError *) feil switch (resultat) tilfelle MFMailComposeResultCancelled: NSLog (@ "Post avbrutt: du avbrutt operasjonen og ingen e-postmelding ble stilt i kø. "); gå i stykker; tilfelle MFMailComposeResultSaved: NSLog (@ "E-post lagret: du lagret e-postmeldingen i utkast-mappen."); gå i stykker; tilfelle MFMailComposeResultSent: NSLog (@ "Mail send: e-postmeldingen er i kø i utboksen. Den er klar til å sende."); gå i stykker; tilfelle MFMailComposeResultFailed: NSLog (@ "Mail mislyktes: e-postmeldingen ble ikke lagret eller i kø, muligens på grunn av en feil."); gå i stykker; standard: NSLog (@ "E-post ikke sendt."); gå i stykker; // Fjern postvisningen [self dismissModalViewControllerAnimated: YES];
I denne delegatemetoden kontrollerer vi resultatet av at du har vist e-postvisningskontrollen med en bryteretning og deretter avviser visningsstyringen med en animasjon. I ovennevnte kode har jeg bare skrevet ut en NSLog
melding med resultatene, men poenget er at du kan reagere dynamisk på brukerens handling.
På en iPad ser det fint ut å vise e-postgrensesnittet i en sideliste presentasjon. Du kan gjøre det ved å legge til følgende linje av kode like ovenfor [self presentModalViewController: mailer animated: YES];
:
mailer.modalPresentationStyle = UIModalPresentationPageSheet;яя я
Jeg håper du likte denne opplæringen. Hvis du har tilbakemelding eller forespørsler om ytterligere iOS-innhold fra meg, vennligst legg igjen en kommentar nedenfor!