具有多行的NSTextFieldCell

mik*_*wan 6 cocoa objective-c nsoutlineview nstextfieldcell nscell

我需要在每行显示一个NSTextFieldCell,其中多行具有不同的格式.

像这样的东西:

第1行:标题
第2行:说明

我将NSTextFieldCell子类化,但我不知道如何继续使用它.

有任何想法吗?

NSG*_*God 8

首先,你不要子类NSTextFieldCell来实现这一点,因为,作为一个子类NSCell,NSTextFieldCell继承-setAttributedStringValue:.您提供的字符串可以表示为a NSAttributedString.以下代码说明了如何使用普通文件实现所需的文本NSTextField.

MDAppController.h:

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

@end
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

这导致以下结果:

在此输入图像描述

现在,根据您打算如何使用此文本,您可以通过几种不同的方式实现设计.你可能想看看一个NSTextView可能对你有用而不是NSTextField......