2016-03-29 5 views
7

Ich würde Benutzereingaben in einer NSTextView analysieren, so dass eine Zeile, die mit "-" beginnt, automatisch eine Aufzählung starten würde. Was muss ich mit NSTextView.textStorage tun, um eine Aufzählungsliste zu aktivieren, sodass das nächste Aufzählungszeichen automatisch angezeigt wird, wenn Sie nach jeder Aufzählungslinie die Eingabetaste drücken?Aufzählungsliste mit NSTextList im NSTextView-Beispiel?

Ich habe ein paar Beispiele gefunden, aber sie alle setzen die Kugeln von Hand, also frage ich mich, was ist der Sinn der Angabe let textList = NSTextList(markerFormat: "{box}", options: 0), wenn Sie dann manuell das Box-Symbol selbst einfügen müssen?

Derzeit versuche ich dies in einem benutzerdefinierten NSTextView mit einer überschriebenen shouldChangeTextInRange(affectedCharRange: NSRange, replacementString: String?) zu implementieren So ein einfaches Beispiel, das den einfachsten Eingabefall von "-" eine automatische Aufzählung Liste starten würde, wäre hoch angesehen.

Update:

Hier ist der Code, den ich zur Zeit bin mit:

override func shouldChangeTextInRange(affectedCharRange: NSRange, replacementString: String?) -> Bool { 
    super.shouldChangeTextInRange(affectedCharRange, replacementString: replacementString) 

    if string == "-" && replacementString == " " { 
     let textList = NSTextList(markerFormat: "{disc}", options: 0) 
     let textListParagraphStyle = NSMutableParagraphStyle() 
     textListParagraphStyle.textLists = [textList] 
     let attributes = [NSParagraphStyleAttributeName: textListParagraphStyle] 
     string = "\t\(textList.markerForItemNumber(0))\t" 
     textStorage?.addAttributes(attributes, range: NSMakeRange(0, textStorage!.string.length)) 
     return false 
    } 
    else if affectedCharRange.location > 0 && replacementString == "\n\n" { 
     textStorage?.insertAttributedString(NSAttributedString(string: "\t"), atIndex: affectedCharRange.location) 
     return true 
    } 

    return true 
} 

ich nur versucht, den einfachsten Fall der Benutzer die Eingabe zu lösen „-“ als die ersten Zeichen in der NSTextView. Dies geschieht mit dem obigen Code: Output in custom NSTextView

Die größere Schriftart am Anfang kommt von den TypingAttributes, die ich gesetzt habe. Dies wird später automatisch überschrieben, wie Sie sehen können.

Wenn Sie false aus der else if-Klausel zurückgeben und das \ n direkt dort einfügen, wird verhindert, dass NSTextView automatisch neue Aufzählungszeichen hinzufügt. Nachdem ich das erste Mal true von dort zurückgegeben habe, werden neue Kugeln automatisch hinzugefügt, ohne diese Methode aufzurufen ???

Antwort

-1

Try Kugeln mit Unicode-Zeichen hinzufügen, indem Sie ersetzen "- " with \u{2022}

textView.text = " \u{2022} This is a list item!

+1

Ich bin nur nicht versuchen, „•“ an Ort und Stelle einfügen von „-“, was natürlich wie der Anfang eines aussehen Liste, aber es erstellt keine NSTextList in der textView und daher fehlt es allen Bearbeitungsfunktionen, die ein ordnungsgemäß erkanntes Listenobjekt kostenlos zur Verfügung stellt. Wenn Sie am Ende des ersten Elements die Eingabetaste drücken, wird das nächste Element, das mit einem Aufzählungszeichen beginnt, nicht von textView hinzugefügt. Eine korrekte Antwort muss zeigen, wie Sie eine NSTextList richtig in die NSTextView einfügen. – Melodius

Verwandte Themen