Mam etykietę (NSTextField) w IB, która jest przypisana do kontrolera. Sterownik, w przebudzeniu z NIB, ustawia atrybut attributedStringValue etykiety, aby zawierał kolorowy tekst i łącze lub dwa.Przypisany ciąg NSTextextield jest opóźniony w renderowaniu.
Gdy zobaczysz etykietę, zawiera ona prawidłową wartość ciągu, ale część formatowania zostanie utracona - dopóki nie klikniesz etykiety i zostanie ona zaktualizowana, aby zawierała prawidłowe formatowanie.
używam tego kodu, aby ustawić wartość:
[self.testTextField setAllowsEditingTextAttributes:YES];
[self.testTextField setSelectable:YES];
NSMutableAttributedString *linkString = [[NSMutableAttributedString alloc] initWithString:@"hit this "];
[linkString beginEditing];
NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:@"link"];
NSRange range = NSMakeRange(0, [attrString length]);
[attrString addAttribute:NSLinkAttributeName value:[[NSURL URLWithString:@"http://google.com"] absoluteString] range:range];
[attrString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlinePatternDot] range:range];
[attrString addAttribute:NSForegroundColorAttributeName value:[NSColor blackColor] range:range];
[linkString appendAttributedString:attrString];
[linkString appendAttributedString:[[NSAttributedString alloc] initWithString:@" to search"]];
[linkString addAttribute:NSForegroundColorAttributeName value:[NSColor redColor] range:NSMakeRange(0, [linkString length])];
[linkString endEditing];
[self.testTextField setAttributedStringValue:linkString];
w oparciu o ten przykład, zobaczysz ciąg zabarwiony na czerwono i czcionki w domyślnym Label. Następnie, po kliknięciu na etykietę, czcionka zmienia rozmiar i twarz, a link jest renderowany w magiczny sposób.
Jakieś pomysły, w jaki sposób uzyskać prawidłowe renderowanie napisu za pierwszym razem?
Nie musisz nazywać '' endEditing' beginEditing' i podczas konstruowania nadana strunowy. Te metody są używane tylko wtedy, gdy ciąg jest monitorowany pod kątem zmian, takich jak 'NSTextStorage' dla' NSTextView'. –
Mówisz również, że pole tekstowe jest "powiązane" z kontrolerem. Użycie słowa "związany" oznacza, że używasz wiązania kakao, ale wygląda na to, że nie jesteś, ponieważ programujesz wartość pola tekstowego. Czy powiązanie "attributedStringValue" pola tekstowego jest z niczym związane? –
@RobKeniger To IBOutlet, który jest "związany" (co to jest właściwe określenie?) – d2kagw