У меня есть наконечник панели с выходом для одного из его текстовых полей, который установлен в наконечнике для выравнивания по центру. Когда я показываю панель, я бы хотел, чтобы это текстовое поле было выделено жирным шрифтом. Поскольку NSTextField является подклассом NSControl, он может использовать метод setAttributedStringValue и принимать строку с атрибутами. Поэтому я включил жирный шрифт следующим образом:
NSFont *fontBolded = [NSFont fontWithName:@"Baskerville Bold" size:12.0f];
NSDictionary *dictBoldAttr = [NSDictionary dictionaryWithObject:fontBolded forKey:NSFontAttributeName];
NSString *sHelloUser = NSLocalizedString(@"Hello User", @"Hello User");
NSAttributedString *attrsHelloUser = [[NSAttributedString alloc] initWithString: sHelloUser attributes:dictBoldAttr];
[self.fooController.tfPanelCenteredField setAttributedStringValue:attrsHelloUser];
[attrsHelloUser release];
Выделение жирным шрифтом отображается нормально, но теперь поле выровнено по левому краю.
Я попытался добавить setAlignment, но это не дало никакого эффекта:
[self.fooController.tfPanelCenteredField setAlignment:NSCenterTextAlignment];
Поэтому я попытался добавить стиль параграфа по центру к атрибутам строки с атрибутами:
NSFont *fontBolded = [NSFont fontWithName:@"Baskerville Bold" size:12.0f];
NSMutableParagraphStyle *paragStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[paragStyle setAlignment:NSCenterTextAlignment];
NSDictionary *dictBoldAttr = [NSDictionary dictionaryWithObjectsAndKeys:paragStyle, NSParagraphStyleAttributeName, fontBolded, NSFontNameAttribute, nil];
NSString *sHelloUser = NSLocalizedString(@"Hello User", @"Hello User");
NSAttributedString *attrsHelloUser = [[NSAttributedString alloc] initWithString: sHelloUser attributes:dictBoldAttr];
[self.fooController.tfPanelCenteredField setAttributedStringValue:attrsHelloUser];
[attrsHelloUser release];
[paragStyle release];
Теперь текстовое поле снова центрировано, но жирный шрифт исчез. Как будто строка с атрибутами может принимать одну настройку атрибута и только одну. Я пропустил что-то простое?