2011-07-01 6 views
6

각 줄마다 다른 형식의 여러 줄이있는 NSTextFieldCell을 표시해야합니다. 이 같은여러 줄이있는 NSTextFieldCell

뭔가 :

행 1 : 제목
2 호선 : 설명

나는 NSTextFieldCell을 하위 클래스하지만 난 그것으로 계속하는 방법을 모르겠어요.

아이디어가 있으십니까? , NSCell의 서브 클래스로 NSTextFieldCell-setAttributedStringValue:을 상속하기 때문에 당신이 이것을 달성하기 위해 NSTextFieldCell을 하위 클래스이없는 않는

답변

8

첫째. 입력 한 문자열은 NSAttributedString으로 표시 할 수 있습니다. 다음 코드는 보통 NSTextField으로 원하는 텍스트를 얻는 방법을 보여줍니다.

MDAppController.h :

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

@end 

MDAppController.m :이 위해하려는 방법에 따라, 이제

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 

이것은 다음과 같은 결과 텍스트를 사용하려면 몇 가지 다른 디자인을 구현할 수 있습니다. 엔트 방법. NSTextViewNSTextField이 아닌 ...

+0

감사합니다. 시험해 보겠습니다. :디 – mikywan

1

NSTextView을 사용할 때 잘못된 점이 있습니까?