2016-03-29 21 views
7

Chciałbym przeanalizować dane wejściowe użytkownika w NSTextView, tak aby linia zaczynająca się od "-" automatycznie uruchamiałaby listę punktowaną. Co muszę zrobić z NSTextView.textStorage, aby włączyć listę punktowaną, aby następny punkt pojawiał się automatycznie po naciśnięciu klawisza Enter po każdej linii punktora?Lista wypunktowana z NSTextList w przykładzie NSTextView?

Znalazłem kilka przykładów, ale wszystkie wstawiają pociski ręcznie, więc zastanawiałem się, jaki jest sens określania let textList = NSTextList(markerFormat: "{box}", options: 0), jeśli musisz ręcznie wstawić symbol skrzynki?

Obecnie próbuję zaimplementować to w niestandardowym NSTextView z overriden shouldChangeTextInRange(affectedCharRange: NSRange, replacementString: String?) Tak więc prosty przykład, który rozwiązałby najprostszy przypadek wejściowy "-" rozpoczynający automatyczną listę punktowaną, byłby wysoko ceniony.

Aktualizacja:

Oto kod obecnie używam:

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 
} 

Ja tylko próbuje rozwiązać najprostszego przypadku typowania użytkownika „-” jako pierwszych znaków w NSTextView. Tak dzieje się z powyższym kodem: Output in custom NSTextView

Większa czcionka na początku pochodzi z ustawionych przeze mnie atrybutów typowania. Zostanie to automatycznie zmienione później, jak widać.

Powrót do klauzuli i wstawienie bezpośrednio tam \ n uniemożliwi NSTextView automatyczne dodawanie nowych punktorów. Po tym, jak po raz pierwszy wróciłem true, nowe pociski dodawane są automatycznie bez wywoływania tej metody ???

Odpowiedz

-1

Spróbuj dodać pociski za pomocą znaku Unicode przez zastąpienie "- " with \u{2022}

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

+1

ja nie staram się jedynie wstawić „•” zamiast „-”, który będzie oczywiście wyglądać początek list, ale nie tworzy NSTextList w textView i dlatego nie ma w nim całej funkcjonalności edycji, którą poprawnie rozpoznaje obiekt listy za darmo. Jeśli naciśniesz enter na końcu pierwszego elementu, następny element zaczynający się od wypunktowania nie zostanie dodany przez textView. Poprawna odpowiedź będzie musiała powiedzieć, jak poprawnie wstawić NSTextList do NSTextView. – Melodius