NSOutlineViewをサブクラス化して、コンテンツがまだないときにラベルを表示したいと思います。XCodeのインスペクターとよく似ています:
明らかに、デリゲートメソッドを使用することはできません。これは、これをサブクラスとして実装しており、このクラスを使用するときにデリゲートを別のクラスに設定できる必要があるためです。
boundsプロパティの変更を除いて、観察できる通知は見つかりませんでしたが、信頼性はあまり高くありません。
NSOutlineViewをサブクラス化して、コンテンツがまだないときにラベルを表示したいと思います。XCodeのインスペクターとよく似ています:
明らかに、デリゲートメソッドを使用することはできません。これは、これをサブクラスとして実装しており、このクラスを使用するときにデリゲートを別のクラスに設定できる必要があるためです。
boundsプロパティの変更を除いて、観察できる通知は見つかりませんでしたが、信頼性はあまり高くありません。
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];
}