I denna iOS SDK-handledning visar jag hur du tillåter dina användare att skicka e-post utan att lämna din ansökan med klassen MFMailComposeViewController. Vi kommer att konfigurera en e-postmall med mottagare, ett ämne, kroppstext och till och med en bildbilaga.
IOS SDK ger ett lättanvänt, standardgränssnitt som gör att dina användare kan skicka och redigera e-post från din egen applikation. För att göra det måste du använda MFMailComposeViewController
klass. Den här kontrollenheten visar ett standardmailgränssnitt och ger även funktionaliteten att svara på användarhändelser som utförs på det gränssnittet. Du kommer till exempel att meddela dig om användaren slår "skicka" eller "avbryta".
Obs! MFMailComposeViewController är endast tillgänglig på iOS 3.0 eller senare.
Så, hur fungerar det? Följ stegen i den här handledningen för att ta reda på det.
Öppna Xcode och välj? Skapa ett nytt Xcode-projekt ?. Välj Visabaserad applikation och klicka sedan på Nästa. Ange ett namn för ditt projekt. Jag ringde min @? Mail ?. Ange din företagsidentifierare och se till att du har valt "iPhone" för Enhetsfamilj, för att vi ska göra en iPhone-app. Om du är klar klickar du på Nästa. Välj ett ställe för att spara ditt projekt och klicka på Skapa.
яя яÖppna filen "MailViewController.xib" och dra en knapp i vyn. Ställ in titeln på knappen till "Mail". Välj nu mittenknappen i redigeraren för att visa? Assistent editor ?, så vi kan lägga till en åtgärd till den knapp som vi just skapat.
яя яVälj knappen och CTRL-dra till? MailViewController.h ?. I popup-knappen som visas, skriv? OpenMail? för namn och se till att du ansluter anslutningstypen till? Åtgärd? Eftersom vi vill göra en åtgärd och inte ett uttag.
яя яI navigeringsområdet för Xcode 4 väljer du projektnamnet. Välj sedan det aktuella målet (? Mail? I det här fallet) och välj sedan? Byggfaser? flik. Expandera? Länka binära med bibliotek? alternativet och klicka sedan på? +? knappen för att lägga till en ny ram. Skriv? Meddelande "i sökrutan och välj MessageUI.framework alternativ som visas i listan. Klicka? Lägg till? att inkludera denna ram i länkfasen av ditt projekt.
Nu när du har lagt till MessageUI-ramverket i ditt projekt måste du importera den här rammen till visningskontrollen som ska använda MFMailComposeViewController
, så, i vårt fall, MailViewController.h.
Gå till den här filen och ändra koden för att läsa på följande sätt:
#importera#importera @interface MailViewController: UIViewController - (IBAction) openMail: (id) avsändare; @slutet
Som ni kan se, förklarade vi också MFMaileComposeViewControllerDelegate
i ovanstående kod. Vi kommer att använda denna delegat för att se resultatet av posten.
Dra följande bild till? Stödande filer? mapp i ditt projekt. Kontrollera? Kopiera objekt till destinationsgruppens mapp (om det behövs)? är markerad innan du klickar Avsluta.
яя яÖppna? MailViewController.m? fil och bläddra ner till openMail:
åtgärd och ändra koden för att läsa enligt följande:
- (IBAction) openMail: (id) avsändare if ([MFMailComposeViewController canSendMail]) else UIAlertView * alert = [[UIAlertView-tilldelning] initWithTitle: @ "Felmeddelande": @ "Din enhet stöder inte kompositarkivet" delegera: noll cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alert show]; [alert release];
Här kontrollerar vi om den nuvarande enheten kan skicka e-post med canSendMail
klassmetod av MFMailComposeViewController
. Du bör alltid ringa den här metoden innan du öppnar mailgränssnittet. Om enheten inte kan skicka e-post, bör du meddela användaren (jag har använt en UIAlertView
för detta).
Om enheten kan skicka e-post, visar vi postgränssnittet. Gå till openMail:
åtgärd och ändra koden för att läsa enligt följande:
- (IBAction) openMail: (id) avsändare if ([MFMailComposeViewController canSendMail]) MFMailComposeViewController * mailer = [[MFMailComposeViewController allokera] init]; mailer.mailComposeDelegate = self; [mailer setSubject: @ "Ett meddelande från MobileTuts +"]; NSArray * toRecipients = [NSArray arrayWithObjects: @ "[email protected]", @ "[email protected]", noll]; [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 + webbplatsen?"; [mailer setMessageBody: emailBody isHTML: NO]; [self presentModalViewController: mailer animated: YES]; [mailer release]; annan UIAlertView * alert = [[UIAlertView-tilldelning] initWithTitle: @ "Fel" -meddelandet: @ "Din enhet stöder inte kompositarkivet" delegera: noll cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alert show]; [alert release];
Först skapar vi en MFMaileComposeViewController
och kalla det? mailer ?. Vi ställer in mailComposeDelegate
till själv, så vi kan se resultatet av posten. Ämnet är inställt på? Ett meddelande från MobileTuts + ?. Som du kan se, är toRecipients
är av typen NSArray
. Detta beror på att du kan lägga till flera mottagare. Jag har lagt till två falska e-postadresser, men självklart kan du lägga till vilken adress du vill. Därefter lagrar vi en bild som en NSData
objekt, eftersom vi inte kan skicka en UIImage
direkt. Sedan lägger vi till NSData
objekt som bilaga till vårt e-postmeddelande. Vi ställer in typen till en png-bild och filenamn till? MobiletutsImage ?. Det betyder att när mottagaren sparar bilden sparas den under namnet "mobiletutsImage". Det sista vi gör är att visa mailaren innan du släpper mailerobjektet.
Du måste manuellt avvisa postgränssnittet som svar på ett delegatmetodsamtal. Lägg till följande kod under openMail:
verkan:
- (void) mailComposeController: (MFMailComposeViewController *) Controller didFinishWithResult: (MFMailComposeResult) Resultatfel: (NSError *) Fel Switch (resultat) fall MFMailComposeResultCancelled: NSLog (@ "Mail canceled: du avbröt operationen och inget emailmeddelande var i kö. "); ha sönder; fall MFMailComposeResultSaved: NSLog (@ "Mail saved: du sparade e-postmeddelandet i utkast mappen."); ha sönder; fall MFMailComposeResultSent: NSLog (@ "Mail skickas: e-postmeddelandet är i kö i inkorgen. Det är klart att skicka."); ha sönder; fall MFMailComposeResultFailed: NSLog (@ "Mail misslyckades: e-postmeddelandet sparades inte eller köpas, eventuellt på grund av ett fel."); ha sönder; standard: NSLog (@ "Mail inte skickad."); ha sönder; // Ta bort e-postvyn [self dismissModalViewControllerAnimated: YES];
I den här delegatmetoden kontrollerar vi resultatet av att ha visat kontrollenheten för e-postvyn med ett omkopplingsdeklaration och sedan avvisar vykontrollen med en animering. I ovanstående kod har jag helt enkelt skrivit ut en NSLog
meddelande med resultaten, men poängen är att du kan reagera dynamiskt på användarens åtgärd.
På en iPad ser det bra ut att visa mailgränssnittet i en sidopresentation. Du kan göra det genom att lägga till följande rad kod ovanför [self presentModalViewController: mailer animated: YES];
:
mailer.modalPresentationStyle = UIModalPresentationPageSheet;яя я
Jag hoppas att du haft denna handledning. Om du har några kommentarer eller förfrågningar om ytterligare iOS-innehåll från mig, vänligen lämna en kommentar nedan!