【问题标题】:NSComboBox DelegationNSComboBox 委托
【发布时间】:2012-05-24 15:03:11
【问题描述】:

我有一个带有数据源的 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

【问题讨论】:

  • 你有没有幸运地弄清楚这一点?

标签: datasource delegation nscombobox


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 2023-04-03
    • 2023-04-11
    相关资源
    最近更新 更多