문제

서브클래스를 하려고 하는데 NSCell 사용자 정의 배경 하이라이트를 그립니다.문서에서는 재정의가 제안된 것 같습니다. highlight:withFrame:inView: 이 작업을 수행할 수 있어야 하는데 메서드가 호출되지 않습니다.

대신에 나는 재정의했습니다. drawInteriorWithFrame:inView: 잘 작동합니다. 셀에 원하는 것을 그릴 수 있습니다.그러나 문제는 내가 확장하는 NSCell 유형의 기능을 잃어버리면서 모든 것을 직접 그려야 한다는 것입니다. 예를 들어 텍스트를 표시하는 NSTextFieldCell의 기능은 다음과 같습니다.

사용자 정의로 그려진 강조 표시된 셀:

enter image description here

그러나 배경(강조 표시)을 다시 그리고 확장 셀의 주요 기능을 사용하는 기능을 유지하고 싶습니다.

enter image description here

물론 텍스트를 직접 그릴 수도 있지만 더 쉬운 방법이 있기를 바랍니다.

어떤 도움이라도 대단히 감사하겠습니다.

도움이 되었습니까?

해결책

@Bavarious의 도움 덕분에 문제를 해결할 수 있었습니다.확장된 NSTextFieldCell 클래스 구현에는 이제 다음이 포함됩니다.

-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    return nil;
}

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    if ([self isHighlighted]) {
        // Draw highlight background here
    }

    [super drawInteriorWithFrame:cellFrame inView:controlView];
}

열쇠는 당신이 돌아왔는지 확인하는 것입니다 nil ~을 위한 highlightColorWithFrame:inView: 그만하다 drawInteriorWithFrame:inView: 배경을 그리면서 여전히 이를 호출하여 주요 내용(이 경우 텍스트)을 그립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top