NSTextFieldCell с несколькими строками - PullRequest
6 голосов
/ 01 июля 2011

Мне нужно показать NSTextFieldCell с несколькими строками разного формата в каждой строке.

Примерно так:

Строка 1: Заголовок
Строка 2: Описание

Я вложил в NSTextFieldCell подкласс, но я не знаю, как его продолжить.

Есть идеи?

Ответы [ 2 ]

8 голосов
/ 02 июля 2011

Во-первых, у вас нет для подкласса NSTextFieldCell, чтобы достичь этого, поскольку подкласс NSCell, NSTextFieldCell наследует -setAttributedStringValue:. Предоставленная вами строка может быть представлена ​​как NSAttributedString. Следующий код иллюстрирует, как вы можете достичь желаемого текста с помощью обычного NSTextField.

MDAppController.h:

@interface MDAppController : NSObject <NSApplicationDelegate> {
    IBOutlet NSWindow *window;
    IBOutlet NSTextField *textField;
}

@end

MDAppController.m:

@implementation MDAppController

static NSDictionary *regularAttributes = nil;
static NSDictionary *boldAttributes = nil;
static NSDictionary *italicAttributes = nil;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

    if (regularAttributes == nil) {
        regularAttributes = [[NSDictionary dictionaryWithObjectsAndKeys:
        [NSFont systemFontOfSize:[NSFont systemFontSize]],NSFontAttributeName,
                       nil] retain];

        boldAttributes = [[NSDictionary dictionaryWithObjectsAndKeys:
        [NSFont boldSystemFontOfSize:[NSFont systemFontSize]],NSFontAttributeName,
                  nil] retain];

        NSFont *regFont = [NSFont userFontOfSize:[NSFont systemFontSize]];
        NSFontManager *fontManager = [NSFontManager sharedFontManager];
        NSFont *oblique = [fontManager convertFont:regFont
                                       toHaveTrait:NSItalicFontMask];
        italicAttributes = [[NSDictionary dictionaryWithObjectsAndKeys:
              oblique,NSFontAttributeName, nil] retain];
    }


    NSString *string = @"Line 1: Title\nLine 2: Description";
    NSMutableAttributedString *rString =
    [[[NSMutableAttributedString alloc] initWithString:string] autorelease];

    [rString addAttributes:regularAttributes
                     range:[string rangeOfString:@"Line 1: "]];

    [rString addAttributes:regularAttributes
                     range:[string rangeOfString:@"Line 2: "]];
    [rString addAttributes:boldAttributes
                     range:[string rangeOfString:@"Title"]];

    [rString addAttributes:italicAttributes
                     range:[string rangeOfString:@"Description"]];

    [textField setAttributedStringValue:rString];
}
@end

Это приводит к следующему:

enter image description here

Теперь, в зависимости от того, как вы собираетесь использовать этот текст, вы можете реализовать дизайн несколькими различными способами. Возможно, вы захотите выяснить, может ли NSTextView работать на вас, а не NSTextField ...

1 голос
/ 02 июля 2011

Что не так с использованием NSTextView ?

...