index, AV, AppleScript, Bicycle, Cinema, DTM, Dairy, Dev, Fashion, Fitness, Game, Health, Help, Lyrics, Meal, Motor, Motorcycle, Music, Objective-C, PC, PDA, Phone, Robot, S15S, Stationary, Swift, Text, Travel, V36, Watch
共有のカラーパネルをコード中から呼び出すには、
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:のフックを実装してメッセージを無視するのが最も簡単かな。ちょっとこの仕様は変じゃないかなぁ。