2

プログラムで NSPopUpButton を作成し、選択肢の配列を作成しました。個々の配列の選択肢ごとに setAction を作成するにはどうすればよいですか? ありがとう!

NSRect buttonRect = NSMakeRect(1705, 145, 78, 50); 

    //Button Array.  When I pick the choice it closes the diologue box
    NSArray *newArray;
    NSString *color1 = @"Blue Color";
    NSString *color2 = @"Green Color";
    NSString *color3 = @"Clear Color";

    newArray = [NSArray arrayWithObjects: color1, color2, color3, nil];

    NSPopUpButton *button = [[NSPopUpButton alloc] initWithFrame:buttonRect pullsDown:YES];
    [self addSubview:button];
    [button addItemsWithTitles:newArray];
    //want my action for each individual string
    [button setAction:@selector(changeFilterColor)];

-(void) changeFilterColor
{
    NSLog(@"colorChanged");

}
4

2 に答える 2

5

NSMenuDelegateプロトコルをインターフェイス(.hファイル)に追加する必要があります。

@interface MyClass : NSObject <NSMenuDelegate>

それで:

[[button menu]setDelegate:self];

を作成した後NSPopUpButton。また、。で行を削除しsetAction:ます。

このデリゲートメソッドをコピーします。

-(void)menu:(NSMenu *)menu willHighlightItem:(NSMenuItem *)item
{
    if ([item.title isEqualToString:@"Blue Color"]) { ... } //etc
}

比較を完了するために必要なifステートメントを追加します。

于 2012-04-15T00:23:40.660 に答える
2

これに対する別のオプションはsetAction、コードで最初に使用した方法を使用することです。ただし、呼び出しを選択したセレクターについては、送信者オブジェクトを受信するように設定します。このようなもの:

-(void)method:(NSMenuItem *)sender

次に、送信者オブジェクトが有効であることを確認し、代わりにそこからタイトルを取得できます。これを使うのはちょっと気が引けNSMenuDelegateます。

于 2012-11-14T16:54:47.030 に答える