2016-08-17 5 views
0

스토리 보드에 두 개의 NSTextField이 있고 두 클래스 모두 하위 클래스로 변경된 경우를 제외하고는 기본 구성에서 그대로 유지됩니다. 나는 내부를 서브 클래스 화했다 NSTextFieldCell. 원하는대로 각각을 사용자 정의했습니다. 아주 간단한 서브 클래스입니다. 첫 번째 응답자 인 텍스트 필드는 예상대로 나타나지만 다른 텍스트 필드는 나타나지 않습니다. 그것의 셀에 흰색 배경을 그리는 중입니다. 두 필드 사이를 전환하면 배경이 토글됩니다. 흰색 배경을 셀에서 어떻게 제거 할 수 있습니까?NSTextFieldCell은 첫 번째 응답자가 아닌 경우에만 흰색 배경을 그립니다.

LoginTextField :

- (void)baseInit { 
    self.drawsBackground = NO; 
    self.wantsLayer = YES; 
    self.backgroundColor = [[NSColor whiteColor] colorWithAlphaComponent:0.75]; 
    self.textColor = [NSColor blackColor]; 

    CALayer *layer = [[CALayer alloc] init]; 
    layer.backgroundColor = self.backgroundColor.CGColor; 
    layer.borderWidth = 0; 
    layer.cornerRadius = 6; 

    self.layer = layer; 
} 

LoginTextFieldCell :이 기능을 오버라이드 (override)하는 경우

- (void)baseInit { 
    self.drawsBackground = NO; 
    self.focusRingType = NSFocusRingTypeNone; 
} 

enter image description here

는 흰색 배경은 사라지지만 그렇게하지 않을 경우 첫 번째 자리 표시 자 텍스트 레이블을한다 응답자.

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { 
    return [super drawInteriorWithFrame:cellFrame inView:controlView]; 
} 

enter image description here

나는, 엑스 코드 7에서 응용 프로그램을 개발 OS X 엘 캐피 탄에서 실행하고 있습니다. 이 문제를보고 사람들을위한

답변

0

, 나를 위해 일한 솔루션은 NObordered를 설정 한 다음 새 CALayer을 만드는 self.layer를 구성하는 것이었다.

LoginTextField :

- (void)baseInit { 
    self.drawsBackground = NO; 
    self.wantsLayer = YES; 
    self.textColor = [NSColor blackColor]; 
    self.bordered = NO; 

    self.layer.backgroundColor = [[NSColor whiteColor] colorWithAlphaComponent:0.75].CGColor; 
    self.layer.borderWidth = 0; 
    self.layer.cornerRadius = 6; 
}