2012-07-15 4 views
1

NSOutlineView를 서브 클래스 화하여 내용이없는 경우 자체의 레이블을 표시하고 싶습니다. 사용할 때이 서브 클래스로 이것을 구현하고 있습니다 때문에NSOutlineView 하위 클래스에서 내용이 변경 될 때의 알림

enter image description here

은 분명히 내가 대리자 메서드를 사용할 수 없습니다 내가 뭔가 다른 대리자를 설정 할 수 있습니다 많은 엑스 코드의 검사 등 이 클래스.

bounds 속성의 변경 사항을 제외하고는 관찰 할 수있는 알림을 찾지 못했지만 매우 신뢰할 수 없습니다.

답변

0

NSOutlineView의 몇 가지 방법을 재정의하여 코드를 주입했습니다. 매우 우아한 솔루션은 아니지만 작동합니다. 누구에게나 더 나은 해결책이 있다면 알려 주시면 답변을 수락 할 수 있습니다.

- (void)updateEmptyLabelVisibility { 
    int r = [[self dataSource] outlineView:self numberOfChildrenOfItem:nil]; 
    BOOL hasRows = r > 0; 
    _emptyLabel.hidden = hasRows; 
} 

- (void)reloadItem:(id)item { 
    [super reloadItem:item]; 
    [self updateEmptyLabelVisibility]; 
} 

- (void)reloadData { 
    [super reloadData]; 
    [self updateEmptyLabelVisibility]; 
} 

- (void)awakeFromNib { 
    [super awakeFromNib]; 
    [self updateEmptyLabelVisibility]; 
} 

- (void)endUpdates { 
    [super endUpdates]; 
    [self updateEmptyLabelVisibility]; 
}