NSComboBox - 获取所选信息和NSComboBoxDataSource

时间:2009-11-11 01:57:51

标签: objective-c cocoa macos nscombobox

对于我的生活,我不断被NSComboBox困扰。

我创建了一个符合NSComboBoxDataSource协议的对象,并实现了:

- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;

我将NSComboBox的实例设置为使用数据源,并将此对象设置为源。这很好用,我的实现返回项目数,并为特定索引处的项返回NSString值。

然后我决定在选择某些东西时我想做点什么,这就是我的问题开始的地方。在NSComboBoxDataSource协议中没有明显的方法可以覆盖组合框中的项目选择。

所以,我的对象也符合NSComboBoxDelegate并实现:

- (void)comboBoxSelectionDidChange:(NSNotification *)notification;

不幸的是,与选择时NSTableView不同,通知的对象是NSComboBox而不是所选项目的对象。 “很好”我告诉自己,我会调用NSComboBox方法:

- (id)objectValueOfSelectedItem;

这应该返回选中的项目,我可以从那里开始。但是,仅当usesDataSource设置为NO时才会调用该方法,这不是我的情况。我使用它时警告开始飞行。

所以,我的问题是,在使用数据源时,处理NSComboBox选择的正确方法是什么?

1 个答案:

答案 0 :(得分:15)

我认为你想要indexOfSelectedItem而不是objectValueOfSelectedItem。然后,由于您是数据源,因此您应该可以调用自己的comboBox:objectValueForItemAtIndex:方法。