具有多行的NSTextFieldCell

时间:2011-07-01 19:59:34

标签: objective-c cocoa nsoutlineview nscell nstextfieldcell

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

这样的事情:

第1行:标题
第2行:描述

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

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

首先,你没有 继承NSTextFieldCell来实现这一目标,因为作为NSCell的子类,NSTextFieldCell继承{{1} }}。您提供的字符串可以表示为-setAttributedStringValue:。以下代码说明了如何使用普通NSAttributedString实现所需的文本。

MDAppController.h:

NSTextField

MDAppController.m:

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

@end

这导致以下结果:

enter image description here

现在,根据您打算如何使用此文本,您可以通过几种不同的方式实现设计。您可能想要查看@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 是否适合您,而不是NSTextView ......

答案 1 :(得分:1)

使用NSTextView有什么问题?