リセススタイルのNSButtonCellオブジェクトを使用するカスタムスコープバーの作成を試しています。しかし、マウスが動いているときにベゼルを描くことができません。トラッキングエリアを作成して、マウスが入っている間はNOにshowsBorderOnlyWhileMouseInsideを設定し、外側に移動するとYESに設定することで動作させることができますが、これはNSButtonCellが独自にトラッキングを行うので、特にハッキングのようです。カスタムコントロール内の複数のリセスNSButtonCell
コントロールのsetCellメソッドを使用すると、ボタンセルはコントロールのaddTrackingRect:owner:userData:assumeInside:を呼び出し、マウスがホバーしているときにベゼルを描画するように独自のトラッキングを設定します。しかし、同じコントロール内に複数のボタンセルを使用する場合は、ボタンセルのsetControlViewメソッドを使用して各セルのcontrolViewをカスタムコントロールに設定しようとしますが、setCellのようなトラッキングエリアを設定するようにセルを要求しません。
テクニックはNSMatrixがこれを行うために可能でなければなりませんが、利用可能なすべてのAPIとフォーラムを読んだ後、コントロールのsetCellメソッドを使用せずにNSButtonCellの追跡動作を開始する方法が見つかりませんでした。私の額は机の上から殴られて血まみれになっています。
ありがとう、Dirk - 私は完全に同意します。ドキュメンテーションのNSCellの賞賛は、私がボタンを使用したことに対して罪悪感を感じさせたと思う。私はしばらくの間ラットの穴を追いかけると思ったが、これを実装するための満足のいく解決策ではないようだ。 私はupdateTrackingAreaWithFrame:inView:メソッドを試しましたが、そのトリックは行いませんでした。 CocoaがNSButtonを使ってこれを行うときのスタックを見ると、プライベートAPIの束が渡っていることがわかるので、私たちはこれを自分で行うようには見えません。 –