1

NSOutlineViewをサブクラス化して、コンテンツがまだないときにラベルを表示したいと思います。XCodeのインスペクターとよく似ています:

ここに画像の説明を入力してください

明らかに、デリゲートメソッドを使用することはできません。これは、これをサブクラスとして実装しており、このクラスを使用するときにデリゲートを別のクラスに設定できる必要があるためです。

boundsプロパティの変更を除いて、観察できる通知は見つかりませんでしたが、信頼性はあまり高くありません。

4

1 に答える 1

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];
}
于 2012-07-15T18:25:54.340 に答える