2013-01-21 32 views
5

我已经将NSComboBox绑定到界面构建器中的数据源。 当我在NSComboBox中键入内容时,我正确地获得了自动填充建议。如何为NSComboBox启用不区分大小写的自动完成功能?

但是,自动完成区分大小写,这意味着如果字符使用了错误的大小写,我不会收到建议。

如何为NSComboBox启用不区分大小写的自动完成功能,该功能与界面生成器中的数据源绑定?

感谢

回答

4

你应该在你NSComboBox数据源实现comboBox:completedString:,e.g:

- (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 @""; 
} 
+0

但这意味着我无法在界面构建器中指定数据源。正确吗?我有很多很多字段,都是在界面构建器中配置的,将它们以编程方式绑定到数据源将会有很多工作。 – aneuryzm

+0

@patrik你需要支持绑定吗? (数据源的类型是什么) –

+4

如果您使用Cocoa绑定提供ComboBox,则不必实现“required”dataSource方法。只要NSComboBox有一个绑定的控制器,你也可以*组合框连接到一个数据源,并且该数据源只需要实现comboBox:completedString方法。 – iluvcapra

4

可以继承的NSComboBoxCell并覆盖[NSComboBoxCell completedString:]。

- (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; 
} 
+0

正如我在其他问题中所评论的,self.objectValues数据源是否正确?我已将所有字段绑定到界面构建器中的数据源,并且我有80个字段。我应该以编程方式填充它们,以便自定义自动填充? – aneuryzm

+0

@Patrick它适用于两者。 – Elden

相关问题