我有一个带有数据源的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看起来很直截了当,但让我纳闷.选择项目的最佳方式是什么?是否应该在包含此名称的数据源数组中确定记录的索引,然后使用相同的索引选择组合框项?还是有更直接的方法?
*编辑 *
一个更简单、更直接的问题可能是:
如果用户输入(而不是从下拉列表中选择),则将项的名称输入组合框。在使用数据源时,如何从组合框中检索该项的索引?
雪上加霜的是,苹果公司的文档称,selectItemWithObjectValue:应该与内部或外部数据源一起工作。在此:
发布于 2013-04-22 12:40:13
简单回答:使用selectItemAtIndex方法,或者调用setStringValue: (NSComboBox从NSTextField继承),如果您真的想使用字符串的话。
为了完整起见:我来这里是因为一个相关但略有不同的问题。
我只想解释一下我是如何建造我的组合框的。我不确定这是否适用于你的情况,但我希望它能对某人有所帮助。
我实现了DataSource方法以使完成工作,但是让绑定来实际设置值。这样,按返回就可以自动完成一个选项的项目,或者在没有可用的自动完成时创建一个新的值。绑定只负责设置和获取值。
https://stackoverflow.com/questions/10740128
复制相似问题