これは私の最初の質問です。可能な限り明確にするようにします。NSTableView:選択した行の前後にカスタムセパレータを描画する方法
ビューベースのNSTableViewで選択した行にカスタムグラデーションを描画し、微妙なエフェクトを追加したいとします。そのためには、選択した行の前後にあるグリッド線の色を暗くする必要があります(例についてはhereを参照してください)。私は(フラグとしてisSelected
方法を使用して)選択された行のカスタム区切り線を描画するNSTableRowViewにdrawSeparatorInRect:
メソッドをオーバーライドしているが、私は/ Iは下部に線を引くため(一方の下/上に同じ操作を行うことができません上)。
表示手順が同じ順序に従っていないため、暗いセパレータ行を描画する必要があるということを最も近い行に伝えるためにいくつかの方法を試しました(私はdrawSeparatorInRect:
のNSLogsでチェックしました。この順序の変更を少しスクロールします)。だから、時には(ほとんどの場合、スクロールした後)行が選択された行の前に描画されるので、暗い色を使用する必要があることはわかりません(この時点では、選択行はまだ選択されていません。何が起こっているのか理解していない)。
私が試した事のいくつか:選択された行のdrawSeparatorInRect:
方法において
- 、Iは兄弟ビュー(
[superview subviews]
)にアクセスし、再びそれ自体を描画するために次/前のものを強制的に試みました。 - サブクラス
NSTableView
より、selectedIndexesが変更されたときに最も近い行を直接変更します。 drawSeparatorInRect:
メソッドの中から選択された行の外側の線を描くと、hereと表示されます。
Iこの有した注:次/前のいずれかが選択されているかどうかを尋ねる行ビューを、はフラグclosestRowIsSelectedまたは外部「力」の方法暗色呼び出します。
は、私が今持っていることは...選択された行は、両方の上部と下部の境界線を描画しますので、そのうちの一つは、次/前の行ラインに一緒に配置されていることであるそれは微妙だが、それはまだそこに。
どんな助力もうまく受け取ります。
ありがとうございます。
!問題がないので、私は、私は思う...ので、私は見るには何もない(それだけで赤い色で[NSBezierPath fillRect:rect]
を呼び出す)任意のコードを投稿しませんでした。
実際にAppleのドキュメントは正しいと分かりました。NSTableRowViewのデフォルトの動作は、行の一番下ではなく、行の下に区切り線を描画することです。上記のコードサンプルを編集しました。 – Tim
ありがとう、私がやろうとしていることは確かです。しかし、私が行を選択するか、またはテーブルビューをスクロールするたびに、前回選択された行がそれ自身を複数回再描画するため、非常に太字のテキストやその他の奇妙なエフェクトが生成されます。私は何か見落としてますか? –
私はそれを私の古いコードと完全に連動させました。しかし、 'drawSeparatorInRect:'メソッドの最後にある先行するセルビューを強制的にドラッグするコードを、選択された新しい行を与えるデリゲートメソッドに移動しました( 'tableView:shouldSelectRow:'を使用しました) 。再度、あなたの援助に感謝します。 –