2013-01-21 4 views
5

インタフェースビルダー内のデータソースにバインドされたNSComboBoxをバインドしました。 NSComboBoxに何かを入力すると、オートコンプリート提案が正しく取得されます。NSComboBoxの大文字と小文字を区別しないオートコンプリートを有効にするにはどうすればよいですか?

しかし、オートコンプリートでは大文字と小文字が区別されます。つまり、文字が間違った文字を使用している場合は、候補が表示されません。

インタフェースビルダーのデータソースにバインドされているNSComboBoxに対して、大文字と小文字を区別しないオートコンプリートを有効にするにはどうすればよいですか?

おかげ例えば

答えて

4

あなたのNSComboBoxデータソースにcomboBox:completedString:を実装する必要があり、:

- (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

ComboBoxにCocoa Bindingsを指定する場合は、「必須」dataSourceメソッドを実装する必要はありません。 NSComboBoxにバインドされたコントローラがある限り、コンボボックスをdataSourceに接続することもできます。そのdataSourceには、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

関連する問題