2

我有一个带有数据源的 NSComboBox,当您单击三角形并通过单击它选择其中一个项目时,它可以完美运行。但是,我还希望它允许用户在框中键入以使用自动完成来选择名称。目前,当用户键入时,我希望选择的项目会自动完成,但不会选择。

我的想法是我应该实现一个委托方法,以便当用户在组合框中键入并且选择项名称自动完成时,离开组合框将运行该方法,然后从弹出列表中选择同名的项目。

我实现了这个委托方法:

- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor {

    NSString *tempString = [outletPerformanceVenue stringValue];

    NSLog(@"New Value = %@",tempString);

    [outletPerformanceVenue selectItemWithObjectValue:tempString];

    return TRUE;
}

但是,我收到以下编译器错误:

*** -[NSComboBoxCell selectItemWithObjectValue:] should not be called when usesDataSource is set to YES

看起来很简单,但让我想知道......选择项目的最佳方式是什么?我是否应该确定包含此名称的数据源数组中记录的索引,然后使用相同的索引选择组合框项?还是有更直接的方法?

* 编辑*

一个更简单更直接的问题可能是:

如果用户在组合框中输入(而不是从下拉列表中选择)项目的名称。使用数据源时,如何从组合框中检索该项目的索引?

雪上加霜的是,Apple 的文档说 selectItemWithObjectValue: 应该与内部或外部数据源一起使用......在这里:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ComboBox/Tasks/SettingComboBoxValue.html

4

1 回答 1

4

简短回答:如果您真的想使用字符串selectItemAtIndex,请使用该方法或调用(NSComboBox 继承自 NSTextField)。setStringValue:

只是为了完整性:我来这里是因为一个相关但略有不同的问题。

我将解释我是如何构建我的组合框的。我不确定这是否适用于您的情况,但我希望它可以帮助某人。

我实现了 DataSource 方法来完成工作,但让绑定来完成实际设置值的工作。这样,按 return 要么将项目自动完成到其中一个选项,要么在没有可用的自动完成时创建一个新值。绑定只负责设置和获取值。

于 2013-04-22T12:40:13.890 回答