2013-01-21 49 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

相關問題