2

目標

アプリに NSTableView があり、「重なり合う」行を描画して、Automator.app のような「接続」効果を作成したいと考えています。

自動化アプリのスクリーンショット


私が試していること

私が検討しているアプローチは、NSTableView の-(NSRect)frameOfCellAtColumn:(NSInteger)columnIndex row:(NSInteger)rowIndexメソッドを使用して、最初の行以降のすべての行の Y 原点を増やすことです。私の tableView はビューベースで、自動レイアウトを使用しません。

私の質問は、この効果を達成する正しい方法ですか? tableViewにフレームが重なっている行を描画させるのは「危険」に思えますが、これによりtableViewの下部に余分な空白が大量に発生するかどうかわかりません(tableViewは重なりを取りません全体の高さを計算する際にフレームを考慮し、各行の rowHeight 値の合計のみを使用します)。

Automator tableView から効果を達成するための別の標準的な方法があるかどうかは誰にも分かりますか?

4

1 に答える 1

4

Patrick Goley が示唆したように、接続ポイントを背景またはテーブル ビュー セパレーターの一部として描画することで、それを偽造する必要があると思います。

Apple のHoverTableDemo サンプルはいくつかの手法を示しており、WWDC 2011 セッション 120 のビデオ「View Based NSTableView Basic to Advanced」ではそれらの手法について詳しく説明しています。

intercellSpacing接続ポイントの画像サイズに合わせてテーブルビューを設定すると思います。gridStyleMaskを include に設定しますNSTableViewSolidHorizontalGridLineMask

のカスタム サブクラスを使用してNSTableRowView、背景とセパレータ (行の間) のカスタム描画を行います。あなたはオーバーライド-drawBackgroundInRect:-drawSeparatorInRect:、それらのために。

のカスタム サブクラスを使用してNSTableView、行の終わりを超えてグリッドのカスタム描画を行います。これは、必要に応じて、最後の行の下部から離れた矢印である可能性があります。それを行うにはオーバーライド-drawGridInClipRect:します。

于 2016-07-18T23:51:28.270 に答える