Pytanie z góry:Czy możemy ustawić czcionkę NSFont lub jej styl czcionki zamiast zmieniać nazwę czcionki?
możemy bezpośrednio przejść do font-weight i informacje font-style dla nadana ciąg? Czy możemy stworzyć nowy ciąg, dla którego jesteśmy w stanie ustawić te informacje?
Wyjaśnienie:
W iOS 6, możesz przełączać wybrane jako pogrubienie lub kursywa. Ale sposób, w jaki to działa, jest irytujący: nie zmienia NSFontAttributeName, który Apple nam ujawnił (zmieniając nazwę czcionki z, na przykład, "HelveticaNeue" na "HelveticaNeue-Bold"). Zamiast tego zachowuje rodzinę czcionek jako "Helvetica Neue" i zmienia "grubość czcionki" na pogrubioną czcionkę w stylu. Jeśli było zapytać wystąpienie nadana tekstu do jego opisu, można zobaczyć coś takiego na swoich informacji czcionki:
NSFont = "<UICFFont: 0x1fbc53a0> font-family: \"Helvetica Neue\"; font-weight: bold; font-style: normal; font-size: 16px";
Stwarza to problem. Nie możemy zmienić czcionki, zachowując pogrubioną i pochyłą informację. Jeśli przeskoczysz przez obręcze skanujące stary łańcuch przypisany do informacji o stylu, tworząc nowy ciąg z nową czcionką, a następnie zmieniając nazwę atrybutu czcionki (używając, na przykład, "Courier-Bold" wszędzie tam, gdzie chcesz, aby to było pogrubiony), tworzysz nowy problem: jeśli spróbujesz zmienić czcionkę z powrotem na normalną (nie pogrubioną), zamiast tego będziesz mieć nazwę czcionki, np. "Courier-Bold" AND o wadze "pogrubionej", ponieważ informacja o stylu nie została jeszcze ustawiona na pogrubienie. A przełączanie nie zmieni oczywiście nazwy czcionki. Zasadniczo stworzyłeś czcionkę, której nie można już zmienić, gdy użytkownik przełącza zaznaczony tekst. Użytkownik wciśnie przycisk "pogrubiony" w menu kontekstowym, ale nic nie zrobi, ponieważ można śmiało powiedzieć, że śmiałość została zakodowana na stałe w nazwie czcionki.
Jeśli przejdziesz do innej trasy i spróbujesz zastąpić "toggleBoldface" i "toggleItalic" w swoim UITextView, nie będzie możliwe, aby rzeczywiście zapobiec zmianie informacji o stylu w łańcuchu stylu. Nie można, jak się wydaje, zmienić samej nazwy czcionki podczas zdarzenia toggle.
Jeszcze raz pytanie: czy możemy w jakiś sposób uzyskać bezpośredni dostęp do informacji o grubości czcionki i stylu czcionki? Czy możemy stworzyć nowy ciąg, dla którego jesteśmy w stanie ustawić te informacje? Rozwiązałoby to problem polegający na zamianie jednej czcionki na drugą i zachowaniu informacji o stylu.
i podwójną wyjaśnienie:
Mówimy o iOS. Po ustawieniu atrybutu fontów atrybutów (NSFontAttributeName) dla pewnego zakresu znaków, wewnętrznie iOS tworzy NSFont z ciągiem znaków. Łańcuch stylu będzie czytał "font-weight: normal; font-style: normal", jeśli samodzielnie ustawiłeś atrybut czcionki. Ale ten ciąg stylów jest miejscem przechowywania pogrubionej i pochylonej informacji ustawionej w UITextView (przez przełączanie).
Musisz coś jeszcze raz zmodyfikować w swoim pytaniu: NSFont jest dla MacOS, a *** UIFont *** dla iOS; jakiej architektury używasz i/lub której klasy czcionek używasz? –
Obawiam się, że to nie jest poprawne. Tworzysz NSFontAttributeName jako atrybut dla przypisanego ciągu znaków (wyznaczając UIFont), a wewnętrznie iOS zamienia go w NSFont. W związku z tym, kod, który zawierałem, mówi "NSFont" jest tym, co przeczytasz, jeśli poprosisz o kawałek przypisanego tekstu do jego opisu za pomocą NSLog. –
Mówiąc dokładniej, informacja NSFont jest częścią tego, co przeczytasz, jeśli zapytasz NSAttributedString o jej opis. –