2012-01-25 12 views
7

Poszukuję niezawodnej techniki do prostego formatowania napisów (pogrubienie, kursywa, ...) w NSTextView. Parsowanie tekstu jest prawie gotowe za pomocą wyrażenia regularnego, ale teraz muszę zastosować cechę czcionki, a także zmienić jej rozmiar.Technika formatowania/kolorowania łańcucha NSTextView

Niektóre fragmenty kodu, w jaki sposób mogę dokonać tekst pogrubiony

[[textView textStorage] beginEditing]; 
[[textView textStorage] applyFontTraits:NSFontBoldTrait range:range]; 
[[textView textStorage] endEditing]; 

To, a także zmiany wielkości z

[[textView textStorage] beginEditing]; 
NSFont* font = [[textView textStorage] attribute:NSFontAttributeName atIndex:range.location effectiveRange:nil]; 

NSFont* newFont = [NSFont fontWithName:[font familyName] 
            size:[font pointSize] + size]; 

[[textView textStorage] addAttribute:NSFontAttributeName 
           value:newFont 
           range:range]; 
[[textView textStorage] endEditing]; 

działa dobrze. Jedyny problem, jaki mam teraz, polega na tym, że w niektórych przypadkach, kiedy wpisuję nowe znaki, te znaki są domyślnie pogrubione lub kursywą, nawet jeśli nie zastosuję do nich właściwości.

Czy muszę zresetować coś za pomocą setTypingAttributes z NSTextView, czy po prostu tęsknię za czymś tutaj?

+0

Muszę zrobić coś podobnego. Czy możesz powiedzieć, gdzie wywołujesz kod formatowania? W moim przypadku mam widok tekstowy, który używa powiązania, więc można go zmodyfikować albo poprzez edycję, albo poprzez zmianę wykonaną przez kontroler bazowy. – paulmelnikow

Odpowiedz

2

Myślę, że masz rację z podejściem do ustawienia typingAttributes. Reference for -setTypingAttributes: says

Jednakże, jeśli dodasz jakiekolwiek akcje użytkownika, które zmieniają atrybuty tekstu, akcja powinna użyć tej metody, aby później zastosować te atrybuty. Akcje użytkownika, które zmieniają atrybuty, powinny zawsze ustawiać atrybuty pisania, ponieważ może nie być późniejszej zmiany w wyborze przed następnym wpisaniem.

To wydaje się mieć zastosowanie w twojej sprawie.

Nie wiem, czy opisane zachowanie jest poprawne tylko dla edytorów WYSIWYG, takich jak TextEdit. Wydaje się, że pracujesz nad czymś podobnym do zachowania edytora z podświetlaniem składni. Tam naprawdę nie chcesz zmieniać atrybutów tekstów ręcznie, ale raczej na podstawie struktury z gramatyki. Prawdopodobnie w tym przypadku nie pasuje i powinieneś zresetować typingAttributes lub ustawić go zgodnie z parsowaniem do tego miejsca.

+0

Ponieważ efekt nie był reprodukcyjny w stanie po mojej stronie, myślę, że usunięcie "typingAttributes" jest drogą do zrobienia. Wrócę do tej odpowiedzi i oznaczę ją jako poprawną, gdy będę mógł ją zweryfikować. – brutella

+0

Po prostu próbowałem i działa to dla mnie. Używam metody 'textViewDidChangeSelection:' z 'NSTextViewDelegate' do przechwytywania i wywoływania' setTypingAttributes: '. Powiedz mi, jeśli to nie zadziała, wtedy gdzieś wyślę przykładowy projekt. – febeling

+0

Oto przykładowy przykład: git: //gist.github.com/1816087.git Test typu, wytłuszczenie za pomocą przycisku, umieszczenie kursora wewnątrz zakresu zimnego, typ i jest to zwykły ciężar czcionki. – febeling