在我的一生中,我一直被 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/