昨日の続き。コンテキストメニューで3種類の画像フォーマットを選択する個所の実装について。
これら3つのメニューは排他的で1つを選ぶと他の二つのチェックを外さなければならない。最初は Cocoa Bindings で簡単にできるだろうと高をくくっていたが、結局複数のパス(Model Key Path)が必要だったり、既にチェック済みの状態で選ぶとチェックが外れてしまうなど、どうもうまくいかなかった。結局いい方法が思い浮かばず IBOutletとIBActionを3つのメニューそれぞれに接続して、ベタに制御することにした。
AppController
@interface AppController : NSObject {
IBOutlet NSMenuItem* _menu_png;
IBOutlet NSMenuItem* _menu_gif;
IBOutlet NSMenuItem* _menu_jpeg;
:
@implements
- (void)setImageFormat:(int)image_format
{
[_menu_png setState:0];
[_menu_gif setState:0];
[_menu_jpeg setState:0];
switch (image_format) {
case 0:
[_menu_png setState:1];
break;
case 1:
[_menu_gif setState:1];
break;
case 2:
[_menu_jpeg setState:1];
break;
}
[UserDefaults setValue:[NSNumber numberWithFloat:image_format]
forKey:UDKEY_IMAGE_FORMAT];
[UserDefaults save];
}
- (IBAction)setImageFormatPNG:(id)sender
{
[self setImageFormat:0];
}
- (IBAction)setImageFormatGIF:(id)sender
{
[self setImageFormat:1];
}
- (IBAction)setImageFormatJPEG:(id)sender
{
[self setImageFormat:2];
}
これらを InterfaceBuilderで接続する。
あまりにもベタな実装になってしまった。。