2010-10-20 14 views
5

Busco una forma de crear un nssearchfield que se comporta de la siguiente manera:¿Cómo evitar que NSSearchField sobrescriba las cadenas ingresadas utilizando la primera entrada de la lista de autocompletado?

  • usuario escribe en el texto
  • basado en los partidos aparece una terminación automática desplegable
  • el texto en el campo de búsqueda hace no autocompletar al primer elemento de la lista

el punto es, mi cadena que coincide con las búsquedas de cualquier subcadena y la terminación automática en el campo de texto no funcionaría porque sería ove Escribe mi cadena ingresada. De hecho, parece que este debería ser el comportamiento predeterminado, o estoy entendiendo mal el propósito de un campo de búsqueda?
Escribir más restringiría la lista cada vez más, pero solo después de seleccionar un elemento en el menú desplegable de autocompletado, ese elemento se insertaría en el campo de texto.

Si esto no se puede lograr usando un nssearchfield, ¿hay alguna alternativa?

Respuesta

3

Mi propia solución fue en realidad muy simple: simplemente agregue la cadena de búsqueda a la lista de sugerencias para la autocompletación.
Esto se hace en el método NSSearchField delegado control:textView:completions:forPartialWordRange:indexOfSelectedItem::

... 
partialString = [[textView string] substringWithRange:charRange]; 
... 

matches  = [NSMutableArray array]; 

// find any match in our keyword array against what was typed - 
for (i=0; i< count; i++) 
{ 
string = [keywords objectAtIndex:i]; 
if ([string 
    rangeOfString:partialString 
    options: NSCaseInsensitiveSearch | NSForcedOrderingSearch 
    range:NSMakeRange (0, [string length])] 
    .location != NSNotFound) { 
    [matches addObject:string]; 
} 
} 
[matches sortUsingSelector:@selector(compare:)]; 

// Make sure we insert the already entered string, even if it does not 
// match with any of the retrieved keywords. This will enter this string 
// in the search field, as we intended, and it will not be overwritten 
// with any match. 
[matches insertObject:partialString atIndex: 0]; 

return matches; 
+0

Eso es muy inteligente, me gusta. Si las sugerencias tienen varias palabras, esto causa un problema. Funciona muy bien para la primera palabra, pero después de eso insertará la sugerencia completa después de la primera palabra. Me pregunto si hay alguna forma de evitar eso. – Jeremy

+0

Respondió mi propia pregunta. Ver mi respuesta a http://stackoverflow.com/questions/5163646/how-to-make-nssearchfield-send-action-upon-autocompletion/5360535#5360535 para saber cómo evitar la autocompletación después de escribir el espacio. – Jeremy

+0

@jeremy ¿me puede explicar más sobre su respuesta, quiero lograr el mismo autocompletado después de escribir el espacio? –

Cuestiones relacionadas