NSAttributedString in Swift

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

  • NSAttributedString in Swift

    Liebes Forum,

    ich bin neu in der OSX-Entwicklung und versuche mir im Zuge der Einführung von Swift einen Zugang zu erarbeiten :)

    Aktuell arbeite ich viel mit Strings in einem Projekt für eine OSX-App. Unter anderem lasse ich mir Strings in einem NSTextView ausgeben - diesen würde ich nun gern formatieren. Konkret: Ich möchte bestimmte Wörte innerhalb des Strings suchen und hervorheben, zum Beispiel einfärben. Wie ich die Ranges/locations der Wörter herausfinde, weiß ich. Und ich habe herausgefunden, dass NSAttributedString offenbar ermöglicht, Strings formatiert darzustellen. Leider konnte ich keine praktische Referenz für Swift finden, sondern lediglich für Objective C.

    Daher die Frage in die Runde: Wie wende ich NSAttributedString in Swift an?

    Dank vorab und viele Grüße
  • Gesehen! Danke für den Hinweis. Auch wenn die Schaltflächen auf der Doku-Seite schon Fußnotencharakter haben, betrachtet man deren Größe ;)

    Leider komme ich trotz der Swift-Referenz nicht voran. Mir gelingt es nicht, meinem vorhandenen String ein setAttribute zuzuweisen oder ihn zu einem NSAttributedString umzuwandeln. Wie kann ich bspw. die textColor einer bestimmten Range innerhalb eines Strings anpassen?
  • mrtn.lxo schrieb:

    Mir gelingt es nicht, meinem vorhandenen String ein setAttribute zuzuweisen

    Ein reiner String kennt ja auch keine Attribute.

    mrtn.lxo schrieb:

    oder ihn zu einem NSAttributedString umzuwandeln.

    Quellcode

    1. let sampleString = "Hallo Welt!"
    2. var attributedString = NSMutableAttributedString(string: sampleString)


    mrtn.lxo schrieb:

    Wie kann ich bspw. die textColor einer bestimmten Range innerhalb eines Strings anpassen?

    Quellcode

    1. let aColor = NSColor.redColor()
    2. let aRange = NSMakeRange(6, 4);
    3. attributedString.addAttribute(NSForegroundColorAttributeName, value:aColor, range:aRange)
  • Danke für eure Hinweise. Habe basierend darauf folgende Funktion geschrieben:

    Quellcode

    1. func colorizeText(ressource: String) -> NSMutableAttributedString {
    2. var theRessource = ressource
    3. var attributedString = NSMutableAttributedString(string: theRessource)
    4. let aColor = NSColor.redColor()
    5. let aRange = NSMakeRange(6, 40)
    6. attributedString.addAttribute(NSForegroundColorAttributeName, value:aColor, range:aRange)
    7. return attributedString
    8. }
    Alles anzeigen


    Ich möchte einen String übergeben, der dann als NSMutableAttributedString zurückgegeben wird und in einem TextView angezeigt wird.

    Quellcode

    1. ​@IBOutlet var codeTextFieldOutlet : NSTextField


    Der Compiler meckert zwar nicht, wenn ich dann versuche den AttributedString in den TextView zu packen:

    Quellcode

    1. ​self.codeTextFieldOutlet.insertText(self.colorizeText(targetText))


    ... wenn ich das Programm allerdings starte und die Funktion aufrufe, höre ich nur ein "Dong" und nichts passiert ?(
    Da ich mit mehreren Textfeldern arbeite, dachte ich es läge evtl an resignFirstResponder, aber auch das hat nicht geholfen. Was mache ich falsch?
  • macmoonshine schrieb:

    Versuch es mal über attributedStringValue.

    Compiler meldet: "NSAttributedString is not identical to NSMutableAttributedString"

    Edit: objectValue klappt auch nicht.
    Edit 2: objectValue klappt doch!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von mrtn.lxo ()

  • Es funktioniert!

    Quellcode

    1. func attributeString(ressource: String) -> NSMutableAttributedString{
    2. var attributedRessource = NSMutableAttributedString(string: ressource)
    3. let theCompleteRange = NSMakeRange(0, countElements(ressource))
    4. let theFont = NSFont(name: "Menlo Bold", size: 11)
    5. let theColor = NSColor.whiteColor()
    6. // Schriftart
    7. attributedRessource.addAttribute(NSFontAttributeName, value: theFont, range: theCompleteRange)
    8. // Textfarbe
    9. attributedRessource.addAttribute(NSForegroundColorAttributeName, value: theColor, range: theCompleteRange)
    10. // Hintergrundfarbe
    11. attributedRessource.addAttribute(NSBackgroundColorAttributeName, value: NSColor.redColor(), range: NSMakeRange(10,20))
    12. return attributedRessource
    13. }
    Alles anzeigen


    Mittels objectValue lässt sich in einem TextField der attributedString darstellen.

    Quellcode

    1. TextFieldOutlet.objectValue = self.attributeString(targetText)


    Vielen Dank für eure Hilfe!