私は OS X アプリ (ターゲット 10.10、Xcode 6.1) を作成していますが、カスタム NSButtonCell サブクラスに本当に混乱しています。ここで、あってはならないことが起こっているようです。私は OS X プログラミングに慣れていないので、NSButtonCell の内部動作について洞察を持っている人がいるかどうか尋ねています。
まず、何が機能しているように見えますか?
- ボタンの画像とタイトルを設定できます。画像は正常に表示されます。
- ストーリーボードは、ボタンをスタイル: テクスチャ、タイプ: Momentary Change に設定します。境界線ではなく、透明ではなく、混合状態を許可しません。
苦情のリスト:
-drawTitle:withFrame:inView:セルの に応じてカスタム カラーでタイトルを描画するようにオーバーライドしますhighlighted。この色は、セルが強調表示されていないときのはずですが、実際には.#cccccc#d6d6d6- ボタンには画像と代替画像の両方があります。描画される画像は決して代替画像ではないため、オーバーライド
-drawImage:withFrame:inView:してセルの正しい画像を選択しますhighlighted。これは機能しているように見えますが、NSButtonCell は一体何なのでしょうか? オン/オフ状態は強調表示とどう違うのですか? 私は多くの Type オプションを試しましたが、ボタンを押すと一時的に変化highlightedし、トグルするという事実を変えるものはないようですstate。 - ハイライトの瞬間的な変化といえば、その持続時間は可能な限り短いように見えるので
-drawWithFrame:inView:、指定されたしきい値よりも頻繁に呼び出されるのを防ぐために、ある種の「デバウンサー」を実装する必要がありました。 - 私のボタンセルには、プロパティ
myBackgroundColorともありますmyAlternateBackgroundColor。backgroundColorカスタムの背景形状 (塗りつぶされた四角形、塗りつぶされた円など) を描画できるようにする必要があるため、使用していません。の場合、代替背景色が使用されhighlightedます。ここでの問題は、代替の背景色が! のよう#93edbfに見えること#a1eecbです。のように見せるに#93edbfは、色を に設定する必要があり#84ecb2ます。 - ここまでは、このボタン セルの 1 つの特定のインスタンスについて説明してきました。しかし、別の例では、別の背景がまったく描画されていません! ストーリーボードのコードを読みましたが、ボタンは可能な限り同一です。私のView Controllerコードも同様に、両方のボタンセルのプロパティを同時に更新します。ボタンの動作が別のボタンと異なるのはなぜですか?
- マウスを押した後、「瞬間的に」ではなく、マウスを押したときにボタンを強調表示したい。カスタムセルにはまだ実装していません。男、NSButtonCellには本当に欠けているものがあります。そのようなことはどのように起こりますか?OS X と iOS のチームが互いに話し合ったことはありませんか?
どうなり得るか?
セルcontrolTintが に設定されていることを確認しましたNSClearControlTint。バックグラウンド フィルター、合成フィルター、およびコンテンツ フィルターがこれに関係していない可能性があるかどうかを確認しました。
Apple が UI 要素にネイティブのルック アンド フィールを使用することを本当に望んでいることは知っていますが、ハイライト ティントの使用を強制するところまで行くとは思いもしませんでした。