在我的一生中,我一直被 NSComboBox 所困扰。

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

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

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

然后我决定在选择某些东西时我想做一些事情,这就是我的问题开始的地方。 NSComboBoxDataSource 协议(protocol)中没有明显的方法可以覆盖来处理组合框中的项目选择。

所以,我也让我的对象符合 NSComboBoxDelegate 并实现:
- (void)comboBoxSelectionDidChange:(NSNotification *)notification;

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

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

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

最佳答案

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

关于objective-c - NSComboBox - 获取选定的信息和 NSComboBoxDataSource,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1712515/

10-10 20:57