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