【问题标题】:NSComboBox - Obtaining selected information and NSComboBoxDataSourceNSComboBox - 获取选择的信息和 NSComboBoxDataSource
【发布时间】:2009-11-11 01:57:50
【问题描述】:

在我的一生中,我一直被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 选择的正确方法是什么?

【问题讨论】:

    标签: objective-c cocoa macos nscombobox


    【解决方案1】:

    我认为你想要indexOfSelectedItem 而不是 objectValueOfSelectedItem。那么既然你是数据源,你应该可以调用你自己的comboBox:objectValueForItemAtIndex: 方法。

    【讨论】:

      猜你喜欢
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多