NSTextField добавить межстрочный интервал

Я использую NSTextField, а не NSTextView для получения пользовательского ввода, но мне нужно настроить шрифт, textColor и межстрочный интервал. Я использую приведенный ниже код, он подходит для шрифта и цвета, но я не знаю, как установить межстрочный интервал.

[self.titleField setTextColor:textColor];
[self.titleField setFont:bold14];

И я также использую NSAttributedString для решения проблемы:

NSFont *bold14 = [NSFont boldSystemFontOfSize:14.0];
NSColor *textColor = [NSColor redColor];
NSMutableParagraphStyle *textParagraph = [[NSMutableParagraphStyle alloc] init];
[textParagraph setLineSpacing:10.0];

NSDictionary *attrDic = [NSDictionary dictionaryWithObjectsAndKeys:bold14, NSFontAttributeName, textColor, NSForegroundColorAttributeName, textParagraph, NSParagraphStyleAttributeName, nil];
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:title attributes:attrDic]; 
[self.titleField setAllowsEditingTextAttributes:YES];
[self.titleField setAttributedStringValue:attrString];

приведенный выше код подходит для отображения строки с атрибутами, но когда я удаляю строку в текстовом поле и начинаю вводить, слова приходят без каких-либо атрибутов.

Как я могу ввести строку в NSTextField с пользовательским шрифтом, цветом и межстрочным интервалом?


person 6 1    schedule 25.06.2012    source источник


Ответы (1)


Лучше использовать методы настройки атрибутов NSTextField's вместо NSAttributedString, потому что тогда он сможет отправить настройки в редактор полей. Каждое текстовое поле имеет NSTextView (в большинстве случаев) "Редактор полей"; а полевой редактор - это то, что делает редактирование.

Ваш NSAttributedString не прилипает, потому что вы только говорите текстовому полю временно отображать эту одну строку. Когда появляется редактор полей, текстовое поле (ячейка) передает свои собственные атрибуты, такие как textField.font и textField.textColor, но никогда не передает атрибуты NSAttributedString.

Было бы лучше использовать NSTextView, чтобы иметь возможность использовать -setDefaultParagraphStyle, потому что вы все равно редактируете несколько строк, насколько я вижу. Если вы не можете из-за проблем с производительностью или чего-то еще, то:


Подкласс NSTextFieldCell, потому что это то, что делает все NSTextField, и переопределяет

- (NSText *)setUpFieldEditorAttributes:(NSText *)textObj

(объявлено в NSCell), чтобы настроить атрибуты для вашего редактора полей так, как вы этого хотите, чтобы вы могли сами отправить ему значение высоты строки через -setDefaultParagraphStyle (и шрифт и т. д.). (textObj — устанавливаемый редактор полей).

person Vervious    schedule 25.06.2012
comment
Спасибо за ваш ответ, но я не могу найти метод setDefaultParagraphStyle в справочнике NSText. - person 6 1; 25.06.2012
comment
Это потому, что редактор полей на самом деле является NSTextView, несмотря на то, что тип возвращаемого значения setUpFieldEditorAttributes: равен NSText. - person Monolo; 25.06.2012