2013-01-21 8 views
5

Ho associato il NSComboBox delimitato a un'origine dati all'interno dell'interfaccia builder. Ottengo correttamente i suggerimenti di completamento automatico, quando digito qualcosa nel NSComboBox.Come posso abilitare il completamento automatico senza distinzione tra maiuscole e minuscole per un NSComboBox?

Tuttavia il completamento automatico fa distinzione tra maiuscole e minuscole, il che significa che non ottengo suggerimenti se il personaggio utilizza il caso errato.

Come abilitare il completamento automatico senza distinzione tra maiuscole e minuscole per un NSComboBox, che è associato all'origine dati nel builder dell'interfaccia?

Grazie

risposta

4

Si dovrebbe implementare comboBox:completedString: nell'origine dati NSComboBox, per esempio:

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

Ma ciò significa che non è possibile specificare l'origine dati nel generatore di interfaccia. Corretta ? Ho molti molti campi, configurati nel generatore di interfacce, sarebbe molto lavoro collegarli a un'origine dati a livello di codice. – aneuryzm

+0

@ patrik devi supportare i collegamenti? (qual è il tipo di dataSource) –

+4

Se stai alimentando un ComboBox con Cocoa Bindings, non devi implementare i metodi DataSource "richiesti". Finché NSComboBox ha un controller associato, puoi * anche * connettere la casella combinata a un dataSource e che dataSource deve avere solo il metodo comboBox: completedString " – iluvcapra

4

è possibile Subclassing un NSComboBoxCell e ignorando [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

Come ho commentato nell'altra domanda, self.objectValues è la fonte dati giusta? Ho limitato tutti i miei campi all'origine dati nel generatore di interfacce e ho 80 campi. Dovrei popolarli a livello di codice, al fine di personalizzare il completamento automatico? – aneuryzm

+0

@Patrick Funziona per entrambi. – Elden

Problemi correlati