1つのウインドウに複数のColorWellを配置した時のColorPanelの共用方法の覚え書き。
下のように1つのウインドウに2個のColorWellを配置すると、どちらをクリックしてもColorPanelが開きますが、このColorPanelからのdelegateの- (void)changeColor:(id)sender
は1つしか書けません。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLtPuGsqsgFGVnFjV5l6ohe-EQie5NVzsxp7KP5vL3W3MImifnkmOVx7-iDuCjJMFxqm8rC0UD7NW-QHzg8YBV3T7AovXvm2gF-uKseMCQAmLhVnUDamFeHlSixHHKctm0r_yVBj3IWQau/s320/colorwel.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRbJSpUTII8ayhymFKvD7ugaDGFjxTrjw0RbjnrvYH0zNJBmg-86xCcy_L2fhUc9v93z5fACrUKe-vkJkq6CSQles-yxYTPRudvYnsXLUxpuTFYQU-jHxFLGeyQO_IViFohUVRImUQPy_n/s320/colorPanel.png)
NSColorWellのインスタンスメソッドを調べてみると、- (BOOL)isActiveというのを発見。
これを使って対象のColorWellの特定ができました。
ヘッダー:CfCalApp.h
@interface CfCalApp : NSObject {
IBOutlet id o_1st_colorWell; // 1個目のcolorWellへのアウトレット
IBOutlet id o_2nd_colorWell; // 2個目のcolorWellへのアウトレット
}
ソース:CfCalApp.m
// ColorPanelのデリゲート
- (void)changeColor:(id)sender
{
NSColor *color = [sender color];
if ( [o_1st_colorWell isActive] ) {
// 1個目のColorWellに対応した処理
}
if ( [o_2nd_colorWell isActive] ) {
// 2個目のColorWellに対応した処理
}
}
1つのウインドウに配置した複数のColorWellは排他的にActive/DeactiveになるのでこれでOKでした。