我已经以编程方式创建了一个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");
}
答案 0 :(得分: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语句以完成比较。
答案 1 :(得分:2)
另一个选择是使用您最初在代码中使用的setAction
方法。但是,对于您选择调用的选择器,请将其设置为接收发件人对象。像这样:
-(void)method:(NSMenuItem *)sender
然后,您可以验证发件人对象是否有效,并从中获取标题。我有点担心使用NSMenuDelegate
。