2011-07-01 32 views
6

Her satırda farklı formatlı birden çok satıra sahip bir NSTextFieldCell göstermem gerekiyor. BöyleBirden Çok Satırlı NSTextFieldCell

şey:

Satır 1: Başlık
Hat 2: Açıklama

Ben NSTextFieldCell sınıflandırma ama onunla gitmek için nasıl bilmiyorum.

Herhangi bir fikrin var mı? , NSCell bir alt sınıf olarak NSTextFieldCell-setAttributedStringValue: devralır beri, bunu başarmak için NSTextFieldCell alt sınıf yok yok

cevap

8

Öncelikle,. Sağladığınız dize, NSAttributedString olarak temsil edilebilir. Aşağıdaki kod, sıradan bir NSTextField ile istenen metni nasıl elde edebileceğinizi göstermektedir.

MDAppController.h:

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

@end 

MDAppController.m: bunun için amacına bağlı olarak, Şimdi

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 

Bu aşağıdaki sonuçlanır kullanılacak metin, tasarımı birkaç farklı şekilde uygulayabilirsiniz ent yolu. Bir NSTextView'un sizin için çalışıp çalışamayacağını görmek isteyebilirsiniz Bir NSTextField ...

+0

Teşekkürler, deneyeceğim. : D – mikywan