6

上位のカップルレベルをインデントしたくない(とにかく独特の外観を持っている)アウトラインビューがありますが、後続のレベルをインデントしたいと思いますこれどうやってするの?

オーバーライド-levelForRow:-levelForItem:て戻り値から2を引くことを試みましたが、これは役に立ちませんでした。また、フレームの幅から2 * indentationPerLevelを減算するようにオーバーライドしようと-frameOfOutlineCellAtRow:しましたが、おそらく開示の三角形を表示していないため、それも役に立ちませんでした。この問題を解決する方法について何か考えはありますか?

アウトラインビューはにバインドされているNSTreeControllerため、基になるデータ構造をフラット化することは困難ですが、アウトラインビューデリゲートを設定しています。

4

1 に答える 1

8

解決策は、メソッドframeOfCellAtColumn:row:である whichを使用することです。NSTableView

- (NSRect)frameOfCellAtColumn:(NSInteger)column row:(NSInteger)row;
{
    NSRect frame = [super frameOfCellAtColumn:column row:row];

    if (column == (NSInteger)[self.tableColumns indexOfObjectIdenticalTo:self.outlineTableColumn]) {
        if (this-item-or-row-matches-your-conditions) {
            frame.origin.x -= self.indentationPerLevel;
            frame.size.width += self.indentationPerLevel;
        }
    }

    return frame;
}

このメソッドは、セル ベースおよびビュー ベースの両方のテーブル ビューとアウトライン ビューのレイアウトを制御します。

于 2015-03-20T00:43:02.473 に答える