如何在NSToolbar中获取NSComboBox以将消息发送到数据源和委托

时间:2011-02-01 22:32:51

标签: objective-c cocoa macos nstoolbar nscombobox

我在NSToolbar中有一个NSComboBox,我希望组合框将消息发送到其数据源和委托。

我的班级采用NSComboBoxDelegateNSComboBoxDataSource协议。我像这样创建我的组合框

    NSRect comboBoxRect = NSMakeRect(0, 0, 175, 20);
    NSComboBox *sourceComboBox = [[NSComboBox alloc] initWithFrame:comboBoxRect];
    [sourceComboBox setDataSource:self];
    [sourceComboBox setDelegate:self];
    [sourceComboBox setUsesDataSource:YES];
    [sourceComboBox setEditable:NO];

    NSToolbarItem *sourceComboBoxItem = [[NSToobarItem alloc] initWithItemIdentifier:@"MyID"];
    [sourceComboBoxItem setView:sourceComboBox];
    [sourceComboBoxItem setMinSize:NSMakeSize(175*1.2, SEGMENT_HEIGHT)];
    [sourceComboBoxItem setMaxSize:NSMakeSize(175*1.2, SEGMENT_HEIGHT)];
    [sourceComboBoxItem setDelegate:self];
    [sourceComboBoxItem setTag:4];

我还实现了以下数据源,委托方法中有断点,但没有任何内容发送到这些方法。

- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (void)comboBoxSelectionDidChange:(NSNotification *)notification;

有关我可能做错的任何建议吗?谢谢。

1 个答案:

答案 0 :(得分:1)

我通过在Interface Builder中创建组合框然后将我的自定义类设置为组合框单元格的数据源和组合框的委托来实现它。我没有采用NSComboBoxDataSource,而是采用了NSComboBoxCellDataSource

我不知道为什么我的第一种方法不起作用,但这种新方法似乎做得很好。