2012-04-14 45 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這個有點小心。