In deze iOS SDK-zelfstudie laat ik zien hoe u uw gebruikers toestaat e-mail te verzenden zonder uw toepassing te verlaten met behulp van de klasse MFMailComposeViewController. We zullen een e-mailsjabloon instellen met ontvangers, een onderwerp, hoofdtekst en zelfs een afbeeldingbijlage.
De iOS SDK biedt een eenvoudig te gebruiken, standaardinterface waarmee uw gebruikers e-mail vanuit uw eigen toepassing kunnen verzenden en bewerken. Om dit te doen, moet u de MFMailComposeViewController
klasse. Deze weergavecontroller geeft een standaard e-mailinterface weer en biedt ook de functionaliteit om te reageren op gebruikersgebeurtenissen die in die interface worden uitgevoerd. Bijvoorbeeld, u de klas zal u op de hoogte stellen als de gebruiker op "verzenden" of "annuleren" klikt.
Opmerking: MFMailComposeViewController is alleen beschikbaar op iOS 3.0 of hoger.
Dus, hoe werkt het? Volg de stappen in deze tutorial om erachter te komen.
Open Xcode en selecteer? Een nieuw Xcode-project maken ?. kiezen View-gebaseerde applicatie en klik vervolgens op volgende. Voer een naam in voor uw project. Ik heb mijn gebeld @? Mail ?. Voer uw bedrijfsidentificatie in en zorg ervoor dat u 'iPhone' heeft geselecteerd Apparaatfamilie, omdat we een iPhone-app gaan maken. Als u klaar bent, klikt u op volgende. Kies een plaats om uw project op te slaan en klik op creëren.
яя яOpen het bestand "MailViewController.xib" en sleep een knop in de weergave. Stel de titel van de knop in op "Mail". Selecteer nu de middelste knop van de Editor om de? Assistent-editor? Weer te geven, zodat we een actie kunnen toevoegen aan de knop die we zojuist hebben gemaakt.
яя яSelecteer de knop en CTRL-sleep naar de? MailViewController.h ?. In de pop-up die wordt weergegeven, voert u? OpenMail in? voor naam en zorg ervoor dat u het verbindingstype instelt op? Actie ?, omdat we een actie willen ondernemen en geen outlet.
яя яSelecteer de projectnaam in het navigatiegebied van Xcode 4. Selecteer vervolgens het huidige doel (in dit geval? Mail?) En selecteer vervolgens de buildfases? tab. Breid het? Link binair met bibliotheken uit? optie en klik vervolgens op de? +? om een nieuw kader toe te voegen. Typ 'bericht' in het zoekvak en selecteer het MessageUI.framework optie die in de lijst verschijnt. Klik? Toevoegen? om dit kader op te nemen in de koppelingsfase van uw project.
Nu u het MessageUI-framework in uw project hebt toegevoegd, moet u dat framework importeren in de view-controller die de MFMailComposeViewController
, dus, in ons geval, MailViewController.h.
Ga naar dit bestand en wijzig de code om deze als volgt te lezen:
#importeren#importeren @face MailViewController: UIViewController - (IBAction) OpenMail: (id) afzender; @einde
Zoals je kunt zien, hebben we ook de MFMaileComposeViewControllerDelegate
in de bovenstaande code. We zullen deze afgevaardigde gebruiken om het resultaat van de mail te bekijken.
Sleep de volgende afbeelding naar de? Ondersteunende bestanden? map in uw project. Zorg ervoor dat u items kopieert naar de map van de bestemmingsgroep (indien nodig)? wordt gecontroleerd voordat u klikt af hebben.
яя яOpen de? MailViewController.m? bestand en scrol omlaag naar de OpenMail:
actie en wijzig de code als volgt:
- (IBAction) openMail: (id) afzender if () MFMailComposeViewController canSendMail]) else UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Failure" -bericht: @ "Uw apparaat ondersteunt de composer-sheet niet" delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alarm show]; [melding vrijgeven];
Hier controleren we of het huidige apparaat e-mail kan verzenden met de canSendMail
klassenmethode van MFMailComposeViewController
. U moet deze methode altijd bellen voordat u de e-mailinterface opent. Als het apparaat geen e-mail kan verzenden, moet u de gebruiker hiervan op de hoogte stellen (ik heb een UIAlertView
voor deze).
Als het apparaat e-mail kan verzenden, wordt de e-mailinterface weergegeven. Ga naar de OpenMail:
actie en wijzig de code als volgt:
- (IBAction) openMail: (id) afzender if (MFMailComposeViewController canSendMail]) MFMailComposeViewController * mailer = [[MFMailComposeViewController alloc] init]; mailer.mailComposeDelegate = self; [mailer setSubject: @ "Een bericht van MobileTuts +"]; NSArray * toRecipients = [NSArray arrayWithObjects: @ "[email protected]", @ "[email protected]", nihil]; [mailer setToRecipients: toRecipients]; UIImage * myImage = [UIImage imageNamed: @ "mobiletuts-logo.png"]; NSData * imageData = UIImagePNGRepresentation (myImage); [mailer addAttachmentData: imageData mimeType: @ "image / png" fileName: @ "mobiletutsImage"]; NSString * emailBody = @ "Heeft u de website MobileTuts + gezien?"; [mailer setMessageBody: emailBody isHTML: NO]; [self presentModalViewController: geanimeerde mailer: YES]; [mailer release]; else UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Failure" -bericht: @ "Uw apparaat ondersteunt de componist-sheet" delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alarm show]; [melding vrijgeven];
Eerst maken we een MFMaileComposeViewController
en noem je? mailer ?. We hebben de mailComposeDelegate
voor zichzelf, zodat we het resultaat van de mail kunnen zien. Het onderwerp is ingesteld op? Een bericht van MobileTuts + ?. Zoals u kunt zien, de toRecipients
is van het type NSArray
. Dit komt omdat u meerdere ontvangers kunt toevoegen. Ik heb twee nep-e-mailadressen toegevoegd, maar u kunt natuurlijk elk gewenst adres plaatsen. Daarna slaan we een afbeelding op als een NSData
object, omdat we geen a kunnen verzenden UIImage
direct. Dan voegen we de NSData
object als bijlage bij onze e-mail. We hebben het type ingesteld op een png-afbeelding en de bestandsnaam op? MobiletutsImage ?. Dit betekent dat wanneer de ontvanger de afbeelding opslaat, deze wordt opgeslagen onder de naam "mobiletutsImage". Het laatste wat we doen is de mailer laten zien voordat het mailer-object wordt vrijgegeven.
U moet de e-mailinterface handmatig weigeren als reactie op een gedelegeerde methodeaanroep. Voeg de volgende code toe onder de OpenMail:
actie:
- (void) mailComposeController: (MFMailComposeViewController *) controller didFinishWithResult: (MFMailComposeResult) result error: (NSError *) error switch (result) case MFMailComposeResultCancelled: NSLog (@ "Mail geannuleerd: u hebt de bewerking geannuleerd en er was geen e-mailbericht in de wachtrij geplaatst. "); breken; case MFMailComposeResultSaved: NSLog (@ "Mail opgeslagen: u hebt het e-mailbericht opgeslagen in de map Concepten."); breken; case MFMailComposeResultSent: NSLog (@ "E-mail verzenden: het e-mailbericht staat in de verzendlijst in de wachtrij. Het is klaar om te verzenden."); breken; case MFMailComposeResult Failed: NSLog (@ "E-mail mislukt: het e-mailbericht is niet opgeslagen of in de wachtrij geplaatst, mogelijk als gevolg van een fout."); breken; standaard: NSLog (@ "Mail niet verzonden."); breken; // Verwijder de e-mailweergave [self dismissModalViewControllerAnimated: YES];
In deze gedelegeerde methode controleren we het resultaat van het weergeven van de mailview-controller met een switch-instructie en vervolgens de weergavecontroller met een animatie. In de bovenstaande code heb ik gewoon een afgedrukt NSLog
bericht met de resultaten, maar het punt is dat u dynamisch op de actie van de gebruiker kunt reageren.
Op een iPad ziet het er goed uit om de mailinterface in een paginabladpresentatie te tonen. U kunt dat doen door de volgende regel code net boven toe te voegen [self presentModalViewController: geanimeerde mailer: YES];
:
mailer.modalPresentationStyle = UIModalPresentationPageSheet;яя я
Ik hoop dat je deze tutorial leuk vond. Als je feedback of verzoeken om extra iOS-content van mij hebt, kun je hieronder een reactie achterlaten!