Можно установить выравнивание или шрифт, но не оба, для NSTextField - PullRequest
3 голосов
/ 06 ноября 2011

У меня есть перо панели с выходом для одного из его текстовых полей, которое установлено в перо для выравнивания по центру.Когда я отображаю панель, я бы хотел, чтобы это текстовое поле было жирным.Поскольку 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];

Теперь текстовое поле снова центрировано, но выделение жирным шрифтом пропало.Это как если бы атрибутивная строка могла принять один и только один атрибут.Я упускаю что-то простое?

1 Ответ

8 голосов
/ 06 ноября 2011

В вашем коде есть опечатка.NSFontNameAttribute должно быть NSFontAttributeName.

Итак, ваш словарь атрибутов:

    NSFont *fontBolded = [NSFont fontWithName:@"Baskerville Bold" size:12.0f];
    NSMutableParagraphStyle *paragStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];   
    [paragStyle setAlignment:NSCenterTextAlignment]; 
    NSDictionary *dictBoldAttr = [NSDictionary dictionaryWithObjectsAndKeys:
                                  fontBolded, NSFontAttributeName,
                                  paragStyle, NSParagraphStyleAttributeName,
                                  nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...