2012-04-14 65 views
2

我已经编程创建了一个NSPopUpButton,并且为我的选择创建了一个数组,我如何为每个单独的数组选择创建一个setAction?谢谢!PopUpButton的设置操作

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"); 

} 
+1

它看起来像你缺少一个[button setTarget:self] – johndpope 2015-02-17 04:16:59

回答

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语句来完成比较。

+0

什么我添加到协议? ' - (void)菜单:'? – 2012-04-15 00:41:05

+0

我修改了我的答案。 – 2012-04-15 00:42:33

+0

谢谢!工作正常! – 2012-04-15 00:46:49

2

另一种选择是使用原来在代码中使用的setAction方法。但是,对于您选择调用的选择器来设置它以接收发件人对象。类似这样的:

-(void)method:(NSMenuItem *)sender 

然后,您可以验证发件人对象是否有效,并从中获取标题。我对使用NSMenuDelegate这个有点小心。