In Xcode Bild an Mail anhängen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • In Xcode Bild an Mail anhängen

    Hallo zusammen,

    ich bin gerade dabei bei meiner App ein Feld einzufügen wo man Unterschreiben kann. Das Feld ist soweit auch Funktionstüchtig. Allerdings weiß ich jetzt nicht wie ich den Inhalt des Feldes (am besten als Bild) speichern kann. Einfach in die Fotobibilotek möchte ich das nicht speichern, sondern es soll in eine Mail die über die App geschrieben wird angehängt werden.

    Weiß jemand wie man die Unterschrift in Form von einem Bild bei der Mail einfügen kann?

    Hier ist einmal ein Teil vom Code für die Mail:




    Quellcode

    1. func showMailComposer() {
    2. guard MFMailComposeViewController.canSendMail() else {
    3. return
    4. }
    5. let composer = MFMailComposeViewController()
    6. composer.mailComposeDelegate = self
    7. composer.setToRecipients(["Email.Adresse@mail.de"])
    8. composer.setSubject("Bewertung Tisch 1")
    9. composer.setMessageBody("""
    10. Teamname: \(String(describing: teamname.text))
    11. Runde: \(String(describing: runde.text))
    12. Zeit: \(String(describing: zeit.text)) Minuten
    13. Punkte Gesamt: \(String(describing: punkteGesamt.text))
    14. Prüfer: "\(prüferErgebnis)"
    15. Unterschrift:
    16. \(unterschriftFoto)
    17. """, isHTML: false)
    18. present(composer, animated: true)
    Alles anzeigen
    Und hier nochmal den Code den ich zur Umwandlung in ein Bild genommen habe (vielleicht habe ich da was falsch gemacht...):


    Quellcode

    1. var unterschriftFoto:UIImage?
    2. @IBAction func absenden(_ sender: Any) {
    3. UIGraphicsBeginImageContextWithOptions(canvasView.bounds.size, false, UIScreen.main.scale)
    4. canvasView.drawHierarchy(in: canvasView.bounds, afterScreenUpdates: true)
    5. unterschriftFoto = UIGraphicsGetImageFromCurrentImageContext()
    6. UIGraphicsEndImageContext()

    Falls jemand eine Idee hätte wie man die Unterschrift einfacher der Mail anhängen könnte würde ich mich auch darüber sehr freuen!

    Vielen Dank schonmal!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Gongkikong ()

  • Gongkikong schrieb:

    Könnte man dann dieses PDF über den Code anhängen? Oder muss man das dann Immer manuell machen?
    Schau doch einfach in die Doku...

    Alternativ könntest Du einmal mit einem HTML-Body testen: Dort wäre - zumindest theoretisch - eine Inline-Grafik á la <img src="data:image/png;base64,..."> denkbar (die Grafik muss dann base64-encoded sein). Keine Ahnung, Ob der MFMailComposeViewController das unterstützt.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:

    Alternativ könntest Du einmal mit einem HTML-Body testen: Dort wäre - zumindest theoretisch - eine Inline-Grafik á la <img src="data:image/png;base64,..."> denkbar (die Grafik muss dann base64-encoded sein). Keine Ahnung, Ob der MFMailComposeViewController das unterstützt.
    Von HTML habe ich leider nicht wirklich Ahnung...
    Gibt es dafür irgendwo ein Anleitung? Oder nach was müsste ich online suchen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Gongkikong ()

  • Gongkikong schrieb:

    Von HTML habe ich leider nicht wirklich Ahnung...
    Naja, für das Formatieren eines Mails brauchst Du keine riesige Ahnung, ein paar Tags zum Formatieren von fett, unterstrichen, kursiv, Titel und Zeilenwechsel … was willst Du noch? Eine gute Referenz war für mich früher SelfHTML, lange nicht mehr benutzt.

    Achte darauf, das Sonderzeichen HTML-Entsprechungen habe (ä = &auml; etc.) und bzgl. Inline-Grafiken kannst Du das Snippet von mir oben googlen.

    Ein paar Grundkenntnisse in HTML sind immer praktisch, ob für (kleine) Web-Sites, Dein Problem oben, oder auch Berichte oder Hilfe-Seiten in Apps (da habe ich z. B. Inline-Grafiken verwendet). Ich nutzte mal einen Krankenhausaufenthalt, um einen Wälzer dazu durchzuarbeiten und hab‘s nie bereut :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes ()

  • Ok danke! Habe das mit dem Umwandel und so soweit verstanden...allerdings habe ich noch drei fragen:

    1. Wie bette ich nun die Strings ein? Die werden ja von jedem User anders ausgefüllt.

    2. Wie füge ich diese Bild genau ein? Als ich nach <img src="data:image/png;base64,..."> gegoogelt habe habe ich dazu leider nichts gefunden was mir weiterhilft...Das Bild konnte ich auf jedenfalls konvertieren (habe ich hiermit gemacht)

    3. Muss ich dann den HTML Code in die Anführungszeichen von dem String einfügen? Und dann am ende des Codes (code sie oben) auf , isHTML: false auf , isHTML: true ?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Gongkikong ()

  • Schau mal nach, wie man in Swift Strings verkettet bzw. Variablen in Strings substituiert, dann sollten sich die ersten zwei Frage von selbst beantworten. Bzgl. der dritten: Probier' es doch einfach einmal mit einem minimalen, statischen HTML-Code aus...

    Du musst schon etwas selber forschen :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ich habe das jetzt damit gelöst (ging in diesem Fall für mich etwas einfacher :D ) : developer.apple.com/documentat…1616885-addattachmentdata

    Nochmal eine Andere Frage...

    Kann ich in einem String einstellen das verschiedene Wörter eine andere Schriftgröße, Fett oder eine andere Farbe haben? Also das der Text später wenn dieser in der Mail steht ein Andere Farbe hat (oder halt andere Schriftgröße etc.)


    In diesem Code möchte ich das anwenden immer der string.text soll eine andere Farbe haben:






    Quellcode

    1. func showMailComposer() {
    2. guard MFMailComposeViewController.canSendMail() else {
    3. return
    4. }
    5. let composer = MFMailComposeViewController()
    6. composer.mailComposeDelegate = self
    7. composer.setToRecipients(["Email.Adresse@gmail.com"])
    8. composer.setSubject("Bewertung Tisch 1")
    9. composer.addAttachmentData(
    10. unterschriftTeilnehmer?.jpegData(compressionQuality: 0.99) ?? Data(),
    11. mimeType: "image/jpeg",
    12. fileName: "Unterschrift Teilnehmer.jpeg"
    13. )
    14. composer.addAttachmentData(
    15. unterschriftPrüfer?.jpegData(compressionQuality: 0.99) ?? Data(),
    16. mimeType: "image/jpeg",
    17. fileName: "Unterschrift Prüfer.jpeg"
    18. )
    19. composer.setMessageBody("""
    20. Teamname:
    21. \(String(describing: teamname.text))
    22. Runde:
    23. \(String(describing: runde.text))
    24. Zeit:
    25. \(String(describing: zeit.text))
    26. Gesamtpunktzahl:
    27. \(String(describing: punkteGesamt.text))
    28. """ , isHTML: false)
    29. present(composer, animated: true)
    30. }
    Alles anzeigen
  • Gongkikong schrieb:


    Kann ich in einem String einstellen das verschiedene Wörter eine andere Schriftgröße, Fett oder eine andere Farbe haben? Also das der Text später wenn dieser in der Mail steht ein Andere Farbe hat
    Es gibt zwar in Foundation den NSAttributedString, also eine Zeichenkette mit Formatierungen, aber den wird MFMailComposeViewController nicht als Body akzeptieren: Formatierte Mails werden - Du wirst die Antwort nicht mögen - als HTML codiert. Here we go again :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ich habe das jetzt mit den HTML Tag hinbekommen... nun aber eine andere Frage die auch damit was zu tun hat.

    Und zwar wenn ich dann die Mail absenden möchte dann stehen die Strings immer in so Klammern wo Optional vor steht (siehe Bild) wie kann ich das verhindern? Also so das nur der String Inhalt steht (als Beispiel wenn zeit.text = 2:30 ist soll da 2:30 stehen)

    Code für den Mail Inhalt:

    Quellcode

    1. composer.setMessageBody("""
    2. Teamname:
    3. <p style="color:red;"> \(teamname.text)</p>
    4. Runde:
    5. <p style="color:red;">\(runde.text)</p>
    6. Zeit:
    7. <p style="color:red;">\(zeit.text)</p>
    8. Gesamtpunktzahl:
    9. <p style="color:red;">\(punkteGesamt.text)</p>
    10. """ , isHTML: true)
    Dateien
    • Bild .jpeg

      (277,82 kB, 99 mal heruntergeladen, zuletzt: )
  • Weil's so still ist, versuche ich mich einmal als (noch) kompletter Nicht-Swifty...

    IBOutlets sind in Swift Optionals und entsprechend wird in der description-Methode der Strings dieser Hinweis ergänzt. Du musst also die Optionals "unwrappen", also nicht-optional machen: Dies kannst Du durch Angabe eines Ausrufezeichens erzwingen, dann würde die App bei einem fehlenden Wert (aka nil) allerdings abstürzen (sollte bei einem IBOutlet nach Laden des Storyboards nicht vorkommen).

    Robuster wäre ein Code, der eine Ausgabe nur vornimmt, wenn das Optional einen Wert enthält (Achtung, nur ungetestet eingetippt):

    Quellcode

    1. if let outputTeam = teamname.text {
    2. outputText = outputText + "<p style=/"color:red;/"> \(outputTeam)</p>"
    3. }
    @all: Bitte korrigiert, wenn ich ungenau oder gar falsch liege ... ich lerne noch :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Das war im Wesentlichen richtig. Nur die Aussage zu den IBOutlets stimmt nicht ganz.
    IBOutlets sind "implicitly unwrapped optionals". Daher muss man bei denen nicht explizit "unwrappen".
    Es war aber ja die Eigenschaft "text" und nicht das Outlet selbst betroffen und für die Eigenschaft war
    die Erklärung ansonsten richtig.