문제는 흰색 배경이 -editColumn : row : withEvent : select :를 보낼 때 NSTableView에 의해 그려지는 점입니다. 셀의 rect를 + [NSColor textBackgroundColor]로 채 웁니다.
개발자 색상 공간에서 명명 된 색상의 현재 설정을 재정의하기위한 공개 API가있는 경우 -editColumn : row : withEvent : select : 등의 재정의 내에 설정할 수 있습니다. 나는 그런 API를 기억하지 않는다 (포인터는 높이 평가된다). 또한이 코드는 Snow Leopard에서만 테스트했습니다 (아래 Leopard SDK 부록 참조). 지원하려는 실제 SDK 및 런타임 환경에 대한 코드를 확인하십시오.
NSTableView에는 채우기 색상에 사용되는 개인용 접근자가 있지만 읽기 전용 속성입니다. 세터가 없으므로 표준 NSTableView에서 값을 변경할 수 없습니다. 우리는 그것을 하위 클래스 화해야합니다. (당신이 outlineView에서 같은 동작을 원하는 NSOutlineView 이미 NSTableView는의 서브 클래스이기 때문에, 우리는 코드가 동일 슈퍼 클래스 제외하고, NSOutlineView를 서브 클래 싱 것이다.하지만 있습니다.)
@interface ASCOutlineView : NSOutlineView {
}
@end
@implementation ASCOutlineView
- _textBackgroundColor
{
return ([NSColor clearColor]);
}
@end
는 것 같다 Snow Leopard에서 테이블 셀을 편집 할 때 눈부신 흰색 블록이 HUD를 망치는 것을 방지해야합니다.
Leopard SDK에 대해 컴파일 된 앱은 조금 더 많은 지원이 필요합니다. Leopard의 tableView는 일부 렌더링 속성을 하드 코딩하여 선택 방법을 재정의해야 할 수도 있습니다.
NSTextFieldCells는 실제로 컨트롤 내부에서 사용할 수 있도록 NSTextViews의 래퍼입니다. 그것들은 일반적으로 window (또는이 경우에는 그 서브 클래스, 패널)에 의해 관리되는 동일한 textView 인스턴스를 공유합니다. NSTableView는 데이터 편집을위한 시스템 UI 설정을 따르도록 NSTextFieldCell의 설정을 변경합니다. 대개. 그런 다음 NSTextFieldCell은 해당 설정을 NSTextView로 전달합니다. 이 파이프 라인의 어느 지점에서나 우리 고유의 UI와 일치하도록 해당 속성 값을 변경하기 위해 메서드를 재정의 할 수 있습니다.
- [NSTextFieldCell setDrawsBackground :]는 올바른 결과를 얻기 위해 약간의 노력이 필요하기 때문에 사용합니다.또한 어떤 다른 객체가 그 상태에 의존 할 수있는 상황에서 우리가 달성하고자하는 효과와 내부 상태를 일관되게 유지하는 것도 중요합니다.
@interface ASCTextFieldCell : NSTextFieldCell {
}
@end
@implementation ASCTextFieldCell
- (void)setDrawsBackground: (BOOL)flag
{
[super setDrawsBackground: NO];
}
@end
그리고 편집중인 셀의 포커스 링이 나타나지 않도록하려면 포커스 링 유형 설정을 변경하는 것이 중요합니다. 실망스럽게도 IB는이 속성에 대한 액세스를 제공하지 않으므로 프로그래밍 방식으로 수행해야합니다.
for(eachColumn in [hudOutlineView tableColumns])
{
columnCell = [[ASCTextFieldCell alloc] initTextCell: @""];
[eachColumn setDataCell: columnCell];
if([columnCell respondsToSelector: @selector(setFocusRingType:)] != NO)
[(NSTextFieldCell *)columnCell setFocusRingType: NSFocusRingTypeNone];
}