Pregunta

BREVE DESCRIPCIÓN DE PROBLEMA: Quiero configurar el texto de una barra de búsqueda sin que se active automáticamente el controlador de pantalla de búsqueda que está obligado a ello.

LONG descripción del problema: Tengo una aplicación iPhone con una barra de búsqueda y un controlador de pantalla de búsqueda. El searchdisplaycontroller se utiliza para autocompletar. Para autocompletar i utilizar una base de datos SQLite. El usuario introduce las primeras letras de una palabra clave y el resultado se muestran en la tabla de la searchdisplaycontroller. Una consulta de selección SQL se ejecuta para cada carácter escrito. esta parte funciona bien, se han introducido las letras y los resultados son visibles.

El problema es el siguiente: Si el usuario selecciona una fila de la tabla que quieren cambiar el texto de la barra de búsqueda al texto que fue seleccionado en la tabla de resultados de autocompletar. También quiero ocultar el controlador de pantalla de búsqueda. Esto no está funcionando. Después de que desaparezca el controlador de pantalla de búsqueda del cuadro de texto en la barra de búsqueda está vacía. No tengo idea de lo que está mal. No pensé que algo tan simple como cambiar el texto de un cuadro de texto puede ser tan complicado.

He tratado de cambiar el texto de 2 métodos: Por primera vez en el método didSelectRowAtIndexPath (para la tabla de resultados de la búsqueda del controlador de pantalla de búsqueda), pero eso no ayuda. El texto estaba allí mientras que el controlador de pantalla de búsqueda estaba activo (animación de distancia), pero después de que el cuadro de texto estaba vacío.

 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"didSelectRowAtIndexPath");

    if (allKeywords.count > 0)
    {
        didSelectKeyword = TRUE;
        self.selectedKeyword = (NSString *)[allKeywords objectAtIndex: indexPath.row];
        NSLog(@"keyword didselectrow at idxp: %@", self.selectedKeyword);

        shouldReloadResults = FALSE;

        [[self.mainViewController keywordSearchBar] setText: selectedKeyword];

        //shouldReloadResults = TRUE;

        [[mainViewController searchDisplayController] setActive:NO animated: YES];
    }
}

También trató de cambiarlo en el método searchDisplayControllerDidEndSearch pero eso no ayuda tampoco. El cuadro de texto era ... otra vez .. vaciar.

editar: de hecho que no era vaciar el texto estaba allí, pero después de la animación desapareciendo los resultados de la tabla de autocompletar todavía están allí. Por lo que termina empeorando.


- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
{
    NSLog(@"searchDisplayControllerDidEndSearch");
    if (didSelectKeyword)
    {
        shouldReloadResults = FALSE;
        NSLog(@"keyword sdc didendsearch: %@", selectedKeyword);

        [[mainViewController keywordSearchBar] setText: selectedKeyword]; //

In this method i call another method which selects the data from sqlite. This part is working.


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    NSLog(@"shouldReloadResults : %i", shouldReloadResults);
    if (shouldReloadResults)
    {
        NSLog(@"shouldReloadTableForSearchString: %@", searchString);
        [self GetKeywords: searchString : @"GB"];
        NSLog(@"shouldReloadTableForSearchString vege");
        return YES;
    }
    return NO;
}

Por favor pregúnteme si no está claro cuál es mi problema. Necesito tu ayuda. Gracias

¿Fue útil?

Solución

¿No se intenta: mainViewController.searchDisplayController.searchBar.text=selectedKeyword;

acceder al campo de la barra de búsqueda del controlador de búsqueda y actualizar su contenido de texto.

Otros consejos

Ahora funciona no sé lo que pasó. Creo que he intentado desactivar el controlador de pantalla de búsqueda después de cambiar el texto. De todos modos gracias por la ayuda. Creo que también trató de cambiar el campo de texto original no el que pertenece al controlador de pantalla de búsqueda y son diferentes (diferentes direcciones en la memoria por lo que he observado)


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //NSLog(@"didSelectRowAtIndexPath");

    if (allKeywords.count > 0)
    {
        didSelectKeyword = TRUE;

        self.selectedKeyword = (NSString *)[allKeywords objectAtIndex: indexPath.row];
        NSLog(@"keyword didselectrow at idxp: %@", self.selectedKeyword);

        //shouldReloadResults = FALSE;

        [[mainViewController searchController] setActive:NO animated: YES];

        [mainViewController.searchController.searchBar setText: self.selectedKeyword];

    }
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top