2010-12-29 8 views
1

私はNSTableViewのデリゲートに- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)rowを実装しました。一番左の列の幅が変わるので、テーブルの行の高さのサイズを変更します。問題は、サイズ変更中にその列だけが再描画されること(およびサイズ変更中に表示される列)です。NSTableViewでNSTableColumnのサイズを変更して強制的に再描画しますか?

この結果、サイズ変更後にファンキーなビジュアルが表示されます。私が望むのは、ユーザーが列のサイズを変更している間に、完全に再描画するようにテーブルビューに指示する方法です。今私ができることは、その列のサイズ変更が完了した後にsetNeedsDisplayに電話することです。

alt text

答えて

1

これは唯一の方法ではないかもしれませんが、テーブルビューにCore Animationレイヤーで固定されていることがあります。それは100%滑らかではありませんが、平均的なユーザーはおそらく気づかないでしょう。

2

NSTableViewmethodnoteHeightOfRowsWithIndexesChanged:をチェックしてください。高さが変更された行のNSIndexSetを作成する必要があります。

更新: これを呼び出すための安全な場所を持っているために、あなたはsetWidth:メソッドをオーバーライドするNSTableColumnをサブクラス化することができます。テーブル代理人が観察できるカスタム通知を投稿することも、テーブルビューをオーバーライドして、その列がそのテーブルに直接代理人に伝えるようにすることもできます。

+0

私はそれをドキュメントで見ましたが、無限ループを引き起こすため、 ' - (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row'から呼び出すことはできません。 – Dov

+0

@Dov更新提案。 – Richard

+0

カスタム列の 'setWidth:'オーバーライドの中から 'noteHeightOfRowsWithIndexesChanged:'と 'setNeedsDisplay'を呼び出そうとしましたが、どちらも違いがありませんでした。具体的には、 'setWidth:'で行うべきことは今何ですか?これをより簡単にすることができるのは、アプリケーションでは、1つの行の高さが変更されたときに、それらがすべて通常行うことです。それは仮定することができます。 – Dov

関連する問題