Tôi có một Nhãn (NSTextField) trong IB được gắn với bộ điều khiển. Bộ điều khiển, trên awakeFromNIB, đặt attributedStringValue của nhãn để chứa một số văn bản màu và một hoặc hai liên kết.Chuỗi được phân bổ của NSTextField bị trễ trong việc hiển thị
Khi bạn thấy nhãn chứa giá trị chuỗi chính xác nhưng một số định dạng bị mất - cho đến khi bạn nhấp vào nhãn và nhãn sẽ cập nhật để chứa định dạng chính xác.
Tôi đang sử dụng mã này để thiết lập giá trị:
[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];
Dựa trên ví dụ này, bạn sẽ thấy chuỗi màu đỏ và font Label mặc định. Sau đó, khi bạn nhấp vào nhãn, phông chữ thay đổi kích thước và khuôn mặt và liên kết sẽ hiển thị một cách kỳ diệu.
Bất kỳ ý tưởng nào về cách để chuỗi hiển thị chính xác lần đầu tiên?
Bạn không cần phải gọi 'beginEditing' và' endEditing' khi bạn đang xây dựng một thuộc tính chuỗi. Các phương thức này chỉ được sử dụng khi chuỗi đang được theo dõi để thay đổi, chẳng hạn như 'NSTextStorage' cho' NSTextView'. –
Ngoài ra, bạn nói trường văn bản là "bị ràng buộc" với bộ điều khiển. Việc sử dụng từ "ràng buộc" ngụ ý rằng bạn đang sử dụng Bindings Cocoa, nhưng có vẻ như bạn không phải, vì bạn đang thiết lập giá trị của trường văn bản theo lập trình. Có phải ràng buộc 'attributedStringValue' của trường văn bản thực sự ràng buộc với bất kỳ thứ gì không? –
@RobKeniger Đó là một IBOutlet được 'ràng buộc' (thuật ngữ thích hợp cho điều đó là gì?) – d2kagw