2009-04-19 5 views

답변

4

이 그것을 할 수있는 "올바른"방법 인 경우 나도 몰라,하지만 마음에 오는 첫번째 것은이 같은 약 보일 수 있습니다 NSTextField있는의 사용자 지정 하위 클래스 수 있도록하는 것입니다 :

- (void)awakeFromNib 
{ 
    [self setDrawsBackground:NO]; 
} 

- (void)drawRect:(NSRect)rect 
{ 
    [super drawRect:rect]; 

    [self lockFocus]; 
    [[NSImage imageNamed:@"<#image filename#>"] drawInRect:rect 
     fromRect:rect 
     operation:NSCompositeSourceOver 
     fraction:1.0]; 
    [self unlockFocus]; 
} 

다시 말하면 필수적인 부분에 대한 대략적인 개요입니다.

어쨌든, 내가 말했듯이,이게 실제로 "올바른"방법인지 (또는 "올바른"방법이 있는지는) 문제가 될지 모르겠다. 그러나 이것은 당신에게 배경을 줄 것이다. 귀하의 NSTextField에 대한 이미지.

당신은 어디 그것을에서 드래그 것, 프로젝트에 이미지를 추가하려면 : 여호수아의 의견에 응답

편집 (나는 그 작은 작은 주석 상자에 충분한 공간이 않을거야) 프로젝트 창 (프로젝트 창의 중간에있는 파일의 주 목록, Xcode 편집 환경을 설정 한 방법에 따라 다르지만 이것은 다를 수 있음)에 있습니다. 클래스가 NSTextField 대신 NSObject에서 상속되도록 헤더를하지만, 편집 - NSTextField를 서브 클래 싱하기 위해

, 당신은 새로운 목표 - C 클래스 파일 (> 새 파일 ... 파일)을 생성 할 것이다. 즉, 헤더 파일은 다음과 같습니다

#import <Cocoa/Cocoa.h> 

@interface BGImageTextField : NSTextField 
{ 
} 

@end 

코드의 나머지 부분에 관해서는, 당신은 (예를 들어, BGImageTextField.m) 구현 파일의 본체에 그것을 추가 할 것, 특히에 @implementation@end 개의 키워드 사이

나는 두 가지 언급도하고 싶습니다. 먼저 Aaron Hillegass가 작성한 코코아 프로그래밍 (Mac OS X)을 참조하십시오.이 설명서는 Auron Hillegass가 전한 코코아 기본 사항 중 대부분을 다루며 일반적으로 코코아를 배우는 가장 좋은 방법 중 하나입니다. 둘째, 내 접근 방식이 효과적 일지는 모르겠지만, 특히 최근에 NSTextField를 확장하는 더 나은 방법을 암시하는 것으로 보이는 최근에 this post을 발견 한 이후로 가장 좋은 방법은 아닙니다.

+2

위 예제에서 textField의 셀은 그려지지 않습니다. [super drawRect : rect]를 추가하면; 그것의 끝에서, 그것과 포커스 링 드로잉 모두 다시 작동해야합니다. 이미 DrawDivsBackground를 NO로 설정 했으므로 super의 drawRect가 어떤 것도 엉망이되어서는 안됩니다. 일을 엉망으로 만들 수도있는 또 다른 일은 fieldEditor가 배경을 그리는 것입니다. 그것에 대해 확실하지 않습니다. 마지막 사항 : 그리기 성능 저하를 방지하기 위해 textField에 불투명 한 조상이 있어야합니다. –

+0

아, 좋은 지적 - 나는 그것을 반영하기 위해 내 게시물을 편집했습니다. (어떤 이유로, 처음 시도했을 때 drawRect를 호출하면 배경 이미지가 그려집니다.) 일반적으로이 문제에 접근하는 더 좋은 방법이 있었으면 좋겠다. . – hbw

+0

고마워, 1 추가 질문하지만, 어디 배경 이미지를 배치합니까? – Joshua

3

NSTextField를 서브 클래 싱하는 대신 배경색을 투명하게 [NSColor clearColor]로 만들고 그 뒤에 이미지를 넣으십시오.

+0

방금 ​​시도해 봤지만 나에게 도움이되지 않습니다. 그러나 저는 그 아이디어가 마음에 들었습니다. 그것은 제 방법보다 훨씬 간단합니다. – hbw

관련 문제