如何为NSComboBox启用不区分大小写的自动完成?

ane*_*yzm 5 cocoa objective-c

我已经将NSComboBox绑定到接口构建器中的数据源.当我在NSComboBox中输入内容时,我正确地获得了自动完成建议.

但是,自动完成是区分大小写的,这意味着如果角色使用了错误的大小写我就不会得到建议.

如何为NSComboBox启用不区分大小写的自动完成,NSComboBox绑定到接口构建器中的数据源?

谢谢

Att*_*a H 5

您应该comboBox:completedString:在 NSComboBox 数据源中实现,例如:

- (NSString *)comboBox:(NSComboBox *)comboBox completedString:(NSString *)partialString
{
    for (NSString dataString in dataSourceArray) {
        if ([[dataString commonPrefixWithString:partialString options:NSCaseInsensitiveSearch] length] == [commonPrefixWithString:partialString length]) {
            return testItem;
        }
    }
    return @"";
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用 Cocoa Bindings 提供 ComboBox,则不必实现“必需”的 dataSource 方法。只要 NSComboBox 具有绑定控制器,您*也*可以将组合框连接到数据源,并且该数据源只需实现“comboBox:completedString”方法。 (4认同)

小智 5

您可以子类化 NSComboBoxCell 并覆盖 [NSComboBoxCellcompletedString:]。

- (NSString *)completedString:(NSString *)string
{
    NSString *result = nil;

    if (string == nil)
        return result;

    for (NSString *item in self.objectValues) {
        NSString *truncatedString = [item substringToIndex:MIN(item.length, string.length)];
        if ([truncatedString caseInsensitiveCompare:string] == NSOrderedSame) {
            result = item;
            break;
        }
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)