2009-08-08 9 views
1

NSPopupButtonを使用してカラーチューザを作成しようとしています。下部にセパレータとカスタム...オプションがあります。配列から色を読み込み、下部にセパレータとカスタムアイテムを貼り付けることは可能ですか?もしそうなら、どうですか?Cocoaバインディング:NSPopupButtonのArrayControllerバインドされたアイテムと固定アイテムを結合します

ありがとうございます!

答えて

0

自分で手作業で作る代わりに実際にNSColorWellを使用する必要があります。 Appleが他のプラットフォーム(特にLinux)より優れたGUIを持っている理由の1つは、開発者がこの種の作業を行うための標準コンポーネントを使用するためです。 「インターフェースをより簡潔にすると思うので」というような引数は、GIMPがGUIを設計しない方法の重要な例である理由です。つまり、基本的には、固定サイズのリスト(InterfaceBuilderの場合のように)ではなく、動的メニューを定義することです。これは、NSMenuクラスとNSMenuItemクラスを使用して行うことができます。あなたがする必要があると思い何

MenuList documentation guide

、オンデマンドでメニューを表示するのではなくで、アプリケーションはデフォルトの配列で起動したときにそれを埋めるです。次に、配列が(モデルオブジェクトを介して)変更されると、メニューの再作成がトリガーされます。または、menuNeedsUpdate:メッセージでメニューをトラップします。

+0

ありがとう。誰もがNSColorWellに専念しているようです。現実には、適切でない場合がたくさんあります。ケースインポイント:iCal。ソースリストのカレンダーで「情報を取得」を選択し、右側のカラーメニューをクリックします。それは私がやろうとしていることです。 リンゴの標準コンポーネントでインターフェイスを設定することはできますが、それは良いGUIにはなりません。逆も真です。 私は正しい方向に向いてくれてありがとう! –

0

バインディングを使用していません。あなたは「カスタム」を簡単に行うことができますが、セパレータは必要ありません。

なぜNSColorWellを使用しないのですか?

+0

私はcolorwellを使用してについて考えてきましたが、メニュー項目は、実際にインターフェースをより簡潔になります。両方とも、sharedColorPanelを開いているのと同じ効果があります。 私の最良の解決策は、手動で私のビューのクラスから配列が変更されるたびにメニューを再構築することです。応答のために –

1

私は同様のPopUpButtonを作成しましたが、まだデフォルトの色を固定配列にバインドしていません(私はこれで現在作業中ですが)。ここでは2つのappraochesがあります - どちらも純粋主義者によってハックと見なされるかもしれませんが、彼らは仕事を完了します。

  1. 独自のメニュー項目を追加するには、NSPopUpButtonCellをサブクラス化してattachPopUpWithFrameをオーバーライドします。私は束縛されたアイテムと一緒にこれを試していません。

  2. アレイ内の 'カスタム..'オブジェクトをハードコードし、表示されたカラーパネルのアクションを持って、新しいアイテムをアレイに追加します。

関連する問題