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 回答