objective-c iphone autocomplete uitextfield

objective c - Autocompletar UITextField-iPhone SDK



objective-c autocomplete (7)

¿Has mirado en UISearchDisplayController ? Hay algunos subprocesos aquí en Desbordamiento de pila , incluidas las referencias de Datos centrales si eso es lo que está utilizando. También algunos métodos alternativos , en otros lugares.

Estoy tratando de averiguar si hay una manera de implementar una funcionalidad de autocompletar en un UITextField para valores específicos.

Sé que el UITextField puede hacer esto usando el diccionario de iPhone (muy parecido a buscar en google en safari, etc.), pero quiero poder corregirlo programáticamente según ciertos valores que especifique.

¿Alguien sabe de alguna manera de hacer esto?

Muchas gracias brett


Alternativamente, puede usar esta subclase UITextField (inspirada en DOAutocompleteTextField):

https://github.com/hoteltonight/HTAutocompleteTextField

Tiene algunas características más y está desarrollado activamente. El ejemplo muestra cómo usar una matriz como fuente de datos para el texto de autosugestión. Utiliza el mismo enfoque que DOAutocompleteTextField, ya que muestra el texto de finalización sugerido "fantasma" en el campo de texto a medida que el usuario escribe.


Brett,

Hice algo muy similar a esto mientras trabajaba en un proyecto reciente y bastante grande. Tuvimos una lista en constante cambio de términos de autocompletado y creamos un autocompletado alrededor de ellos.

Primero, querrás hacer algún tipo de controlador autocompletado. Debe tomar una cadena y devolver todos los términos de autocompletado posibles para esa cadena.

-(NSArray *)completionsForString:(NSString *)myString;

Luego, revisa la clase UIMenuController. Es la clase que muestra las opciones de cortar / copiar / pegar en muchas aplicaciones. Puede obtener la instancia compartida de la misma, rellenar los elementos del menú usted mismo y mostrarlo encima del campo de texto. El usuario puede simplemente tocar el término que desee.

Al final, la solución funcionó muy bien para nuestras necesidades. Espero que te sirva


Con la ayuda del mencionado tutorial de Ray Wenderlich, acabo de implementar una versión de esto para filtrar los nombres en una UITableView existente.

Configuré el delegado de mi campo de texto como mi controlador de vista, mi controlador de vista como UITextFieldDelegate e implementé estos dos métodos:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *substring = [NSString stringWithString:textField.text]; substring = [substring stringByReplacingCharactersInRange:range withString:string]; [self searchAutocompleteEntriesWithSubstring:substring]; return YES; } - (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring { NSMutableArray *autoCompleteArray = [[NSMutableArray alloc]init]; [self retrieveData]; for(NSString *curString in _staffTableArray) { NSString *lowerCaseCur = [curString lowercaseString]; NSRange substringRange = [lowerCaseCur rangeOfString:substring]; if (substringRange.location == 0) { [autoCompleteArray addObject:curString]; } } if (![substring isEqualToString:@""]) { _staffTableArray = [NSMutableArray arrayWithArray:autoCompleteArray]; } [_staffListTableView reloadData]; }


Echa un vistazo a este tutorial de Ray Wenderlich que muestra una forma de lograr un autocompletado personalizado.


Solo me enfrenté con este hilo porque necesito algo similar. ¿Qué tal si implementas tu propia búsqueda con el método de UITextfieldDelegate?

- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

Como probablemente sabrá, se necesita este método para cada tipeo de UITextfield.


usa este método delegado Puede reemplazar los valores que especifique.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text if ([string isEqualToString:@"StackO"]) { textField.text=@""; } return YES; }