ルーム情報 : "droom" (290件)
最近更新されたメモ一覧 :
docs
見出し一覧 :
被リンクメモ一覧 : (1件)
[Tips]
[Home] [List] [Recent] [Orphan] [Help] [Edit] [Remove]

Objective-C : NSColorPanel

NSColorPanelの使い方

共有のカラーパネルをコード中から呼び出すには、

panel = [NSColorPanel sharedColorPanel];
[panel makeKeyAndOrderFront:self];

とする。

最初に表示される色を指定したい場合は、NSColorのインスタンスをcolorとすると、

[panel setColor:color];

でいい。

この状態でカラーパネルを操作すると、アプリケーションのFirstResponderにchangeColor:メッセージが送信される。これを受けるには、

- (void)changeColor:(id)sender
{
  NSColor* color = [sender color];
}

とする。

ところで、カラーパネルにはメッセージのセレクタとターゲットを指定することもできる。例えば、

[panel setTarget:self];
[panel setAction:@selector(insertColor:)];

とすれば、カラーパネルからselfに対してinsertColor:というメッセージが送信されることになる。これを受けるには、

- (void)insertColor:(NSColor*)color
{
  // do something.
}

とすればいい。changeColor:と違い、指定したセレクタの引数にはNSColorのインスタンスが送られる。

ここで注意しなければならないのは、セレクタとターゲットを設定しても、デフォルトのchangeColor:メッセージがFirstResponderに対して別個に送信されるということ。僕は最初「セレクタを指定したらcolorChange:メッセージは送られなくなるはず」と信じていたのだが…

FirstResponderに対するメッセージを無効にするには、changeColor:のフックを実装してメッセージを無視するのが最も簡単かな。ちょっとこの仕様は変じゃないかなぁ。

[Home] [List] [Recent] [Orphan] [Help] [Edit] [Remove]
-->