In diesem iOS SDK-Lernprogramm werde ich Ihnen zeigen, wie Sie Benutzern das Senden von E-Mails ermöglichen, ohne die Anwendung mit der Klasse MFMailComposeViewController zu verlassen. Wir richten eine E-Mail-Vorlage mit Empfängern, einem Betreff, Haupttext und sogar einem Bildanhang ein.
Das iOS SDK bietet eine einfach zu verwendende Standardschnittstelle, über die Benutzer E-Mails aus Ihrer eigenen Anwendung senden und bearbeiten können. Dazu müssen Sie das verwenden MFMailComposeViewController
Klasse. Dieser Ansichtscontroller zeigt eine Standard-Mail-Schnittstelle an und stellt außerdem die Funktionalität bereit, auf Benutzerereignisse zu reagieren, die auf dieser Schnittstelle ausgeführt werden. Zum Beispiel werden Sie von der Klasse benachrichtigt, wenn der Benutzer "Senden" oder "Abbrechen" drückt..
Hinweis: MFMailComposeViewController ist nur unter iOS 3.0 oder höher verfügbar.
Wie funktioniert es? Befolgen Sie die Schritte in diesem Lernprogramm, um dies herauszufinden.
Öffnen Sie Xcode und wählen Sie "Neues Xcode-Projekt erstellen". Wählen Ansichtsbasierte Anwendung und klicken Sie dann auf Nächster. Geben Sie einen Namen für Ihr Projekt ein. Ich rief mein @ "Mail" an. Geben Sie Ihre Firmenkennung ein und stellen Sie sicher, dass Sie "iPhone" für ausgewählt haben Gerätefamilie, weil wir eine iPhone App machen werden. Wenn Sie fertig sind, klicken Sie auf Nächster. Wählen Sie einen Ort zum Speichern Ihres Projekts und klicken Sie auf Erstellen.
яя яÖffnen Sie die Datei "MailViewController.xib" und ziehen Sie eine Schaltfläche in die Ansicht. Stellen Sie den Titel der Schaltfläche auf "Mail". Wählen Sie nun die mittlere Schaltfläche des Editors aus, um den Assistenten-Editor anzuzeigen, damit wir der gerade erstellten Schaltfläche eine Aktion hinzufügen können.
яя яWählen Sie die Schaltfläche aus und ziehen Sie die STRG-Taste auf "MailViewController.h". Geben Sie im angezeigten Popup "openMail" ein. Geben Sie als Namen den Namen der Verbindung an und stellen Sie sicher, dass der Verbindungstyp auf "Aktion" gesetzt ist, da wir eine Aktion und keine Steckdose ausführen möchten.
яя яWählen Sie im Navigatorbereich von Xcode 4 den Projektnamen aus. Wählen Sie dann das aktuelle Ziel aus ("Mail" in diesem Fall) und wählen Sie dann "Build Phases". Tab. Erweitern Sie den Link? Binär mit Bibliotheken? Option und klicken Sie dann auf die Taste? +? Schaltfläche, um ein neues Framework hinzuzufügen. Geben Sie "message" in das Suchfeld ein und wählen Sie die Option MessageUI.framework Option, die in der Liste angezeigt wird. Klicken Sie auf Hinzufügen. um dieses Framework in die Verknüpfungsphase Ihres Projekts aufzunehmen.
Nachdem Sie nun das MessageUI-Framework in Ihr Projekt eingefügt haben, müssen Sie dieses Framework in den View-Controller importieren, der das verwendet MFMailComposeViewController
, In unserem Fall also MailViewController.h.
Gehen Sie zu dieser Datei und ändern Sie den zu lesenden Code wie folgt:
#einführen#einführen @interface MailViewController: UIViewController - (IBAction) openMail: (ID) Absender; @Ende
Wie Sie sehen können, haben wir auch das erklärt MFMaileComposeViewControllerDelegate
im obigen Code. Wir werden diesen Delegierten verwenden, um das Ergebnis der Mail zu sehen.
Ziehen Sie das folgende Bild in das Feld? Unterstützende Dateien? Ordner in Ihrem Projekt. Stellen Sie sicher, dass Elemente in den Ordner der Zielgruppe kopiert werden (falls erforderlich). wird vor dem Klick geprüft Fertig.
яя яÖffnen Sie den? MailViewController.m? Datei und scrollen Sie nach unten openMail:
Aktion und ändern Sie den Code wie folgt:
- (IBAction) openMail: (id) sender if ([MFMailComposeViewController canSendMail]) else UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Fehler" -Meldung: @ "Ihr Gerät unterstützt das Composer-Sheet nicht." Delegat: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [Alertshow]; [Alarme freigeben];
Hier überprüfen wir, ob das aktuelle Gerät mit der E-Mail eine E-Mail senden kann canSendMail
Klassenmethode von MFMailComposeViewController
. Sie sollten diese Methode immer aufrufen, bevor Sie die Mailschnittstelle öffnen. Wenn das Gerät keine E-Mails senden kann, sollten Sie den Benutzer benachrichtigen (Ich habe ein verwendet UIAlertView
dafür).
Wenn das Gerät E-Mails senden kann, wird die E-Mail-Schnittstelle angezeigt. Gehe zum openMail:
Aktion und ändern Sie den Code wie folgt:
- (IBAction) openMail: (id) sender if ([MFMailComposeViewController canSendMail]) MFMailComposeViewController * mailer = [[MFMailComposeViewController-Zuordnung] init]; mailer.mailComposeDelegate = self; [Mailer setSubject: @ "Eine Nachricht von 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" Dateiname: @ "mobiletutsImage"]; NSString * emailBody = @ "Haben Sie die MobileTuts + Website gesehen?"; [Mailer setMessageBody: emailBody isHTML: NO]; [self presentModalViewController: Mailer animiert: JA]; [mailer release]; else UIAlertView * alert = [[UIAlertView-Zuordnung] initWithTitle: @ "Failure" -Meldung: @ "Ihr Gerät unterstützt das Composer-Blatt nicht" Delegat: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [Alertshow]; [Alarme freigeben];
Zuerst erstellen wir eine MFMaileComposeViewController
und nennen Sie es "Mailer". Wir setzen die mailComposeDelegate
an sich selbst, damit wir das Ergebnis der Mail sehen können. Der Betreff ist auf "Eine Nachricht von MobileTuts +" eingestellt. Wie Sie sehen können, die Empfänger
ist von der Art NSArray
. Dies liegt daran, dass Sie mehrere Empfänger hinzufügen können. Ich habe zwei falsche E-Mail-Adressen hinzugefügt, aber Sie können natürlich jede beliebige Adresse angeben. Danach speichern wir ein Bild als NSData
Objekt, weil wir nicht senden können UIImage
direkt. Dann fügen wir die NSData
Objekt als Anhang zu unserer E-Mail. Wir setzen den Typ auf ein PNG-Bild und den Dateinamen auf "MobiletutsImage". Das heißt, wenn der Empfänger das Bild speichert, wird es unter dem Namen "mobiletutsImage" gespeichert. Das Letzte, was wir tun, ist dem Mailer vor dem Freigeben des Mailerobjekts zu zeigen.
Sie müssen die Mailschnittstelle als Reaktion auf einen Aufruf einer Delegatenmethode manuell schließen. Fügen Sie den folgenden Code unter dem hinzu openMail:
Aktion:
- (void) mailComposeController: (MFMailComposeViewController *) -Controller didFinishWithResult: (MFMailComposeResult) Ergebnisfehler: (NSError *) Fehler switch (Ergebnis) case MFMailComposeResultCancelled: NSLog (@ "Mail abgebrochen: Sie haben den Vorgang abgebrochen und keine E-Mail-Nachricht wurde in die Warteschlange gestellt. "); brechen; case MFMailComposeResultSaved: NSLog (@ "E-Mail gespeichert: Sie haben die E-Mail-Nachricht im Entwurfsordner gespeichert."); brechen; case MFMailComposeResultSent: NSLog (@ "E-Mail senden: Die E-Mail-Nachricht befindet sich im Postausgang. Sie ist zum Senden bereit."); brechen; case MFMailComposeResultFailed: NSLog (@ "Mail fehlgeschlagen: Die E-Mail-Nachricht wurde möglicherweise nicht gespeichert oder in die Warteschlange gestellt, möglicherweise aufgrund eines Fehlers."); brechen; Standard: NSLog (@ "Mail nicht gesendet."); brechen; // Entfernen Sie die Mailansicht [self dismissModalViewControllerAnimated: YES];
Bei dieser Delegatmethode überprüfen wir das Ergebnis der Anzeige des Mail-View-Controllers mit einer switch-Anweisung und schließen den View-Controller anschließend mit einer Animation ab. In dem obigen Code habe ich einfach eine NSLog
Nachricht mit den Ergebnissen, aber der Punkt ist, dass Sie dynamisch auf die Aktion des Benutzers reagieren könnten.
Auf einem iPad sieht es gut aus, die Mail-Oberfläche in einer Seitenblattpräsentation anzuzeigen. Sie können dies tun, indem Sie die folgende Codezeile direkt darüber hinzufügen [self presentModalViewController: Mailer animiert: JA];
:
mailer.modalPresentationStyle = UIModalPresentationPageSheet;яя я
Ich hoffe, dir hat dieses Tutorial gefallen. Wenn Sie Feedback oder Anfragen zu weiteren iOS-Inhalten von mir haben, hinterlassen Sie bitte einen Kommentar!