objective-c - NSComboBox - 获取选定的信息和 NSComboBoxDataSource

标签 objective-c cocoa macos nscombobox

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

相关文章:

cocoa - 如何让ViewController成为第一响应者?

macos - 在运行时从扩展坞添加/删除应用程序图标?

ios - 使用 NSKeyedArchiver 编码具有无限维度的 CGSize 失败

c++ - copyfile_state_get 总是显示 0

java - 多操作系统下Tomcat webapps文件路径

ios - 查看 iOS 中的多态性

objective-c - 将方向更改为横向后,uiwebview 未调整大小

iphone - UITextView 子类中的 viewDidLoad?

c - fgets 不读取行的开头

ios - 仅执行一次旋转(CGAffineTransformMakeRotation)