¿Se pueden usar los botones de la barra de alcance para filtrar los resultados sin activar el teclado de una UISearchBar?

Muestro un UITableView con una barra de búsqueda y botones de barra de alcance en carga. Cuando un usuario toca un botón de la barra de alcance, se muestra el teclado y la barra de búsqueda se enfoca (se convierte en el primer respondedor).

¿Es posible permitir el uso de los botones de la barra de alcance para filtrar los elementos de la tabla sin que aparezca el teclado? El usuario puede hacer que aparezca el teclado tocando específicamente dentro del campo de entrada de texto de búsqueda.

preguntado el 22 de mayo de 12 a las 21:05

2 Respuestas

Mi solución al final involucró el uso de dos métodos delegados y una variable de estado en el controlador de vista.

En el controlador de vista agregué la propiedad

NSNumber *scopeButtonPressedIndexNumber; 

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {  

  if (self.scopeButtonPressedIndexNumber != nil) {
    self.scopeButtonPressedIndexNumber = nil; //reset
    return NO;
  }
  else {
    return YES;  
  }

} 

- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope {
  self.scopeButtonPressedIndexNumber = [NSNumber numberWithInt:selectedScope];
} 

En esencia, capturo si se presiona el botón de alcance y devuelvo NO en shouldBeginEditing si ese es el caso. De esta forma, pude evitar que el foco fuera a la barra de búsqueda.

Respondido 29 Oct 15, 10:10

Seguro. La implementación depende de cómo configure su UITableView, pero asumiendo que está usando NSFetchedResultsControllers, podría hacer esto:

1) Digamos que tiene 3 botones de barra de alcance; crear 4 NSFRC.

2) Cree solicitudes de recuperación para los primeros 3 NSFRC, cada uno con un predicado para seleccionar solo el ámbito relevante para el botón de la barra de ámbito correspondiente.

3) Utilice el NSFRC final para la función de búsqueda. Vea la publicación de Brent Piddy en Cómo filtrar NSFetchedResultsController (CoreData) con UISearchDisplayController / UISearchBar para obtener detalles sobre cómo implementar la búsqueda si aún no lo ha hecho.

4) Cuando el usuario toca un botón de la barra de alcance, no escriba cualquier texto en la barra de búsqueda, sino simplemente intercambie el NFC correspondiente. Resalte el botón (o considere usar un UISegmentedControl) para que el usuario pueda ver qué alcance está mirando.

5) Cuando el usuario escriba texto en la barra de búsqueda, cambie la barra de búsqueda NSFRC como se detalla en la publicación de Brent anterior. Elimine cualquier resaltado en los botones o UISegmentedControl y deje la barra de búsqueda en la pantalla con el texto del usuario para que, nuevamente, puedan ver qué alcance están mirando.

contestado el 23 de mayo de 17 a las 12:05

Gracias por la respuesta detallada. No creo que aborde lo que pretendía que fuera mi pregunta principal. Es decir, cómo evitar que la barra de búsqueda tome el foco al tocar los botones del alcance. En mi prueba, "no escribir" ningún texto no fue adecuado porque la barra de búsqueda todavía estaba enfocada. Estoy proporcionando una respuesta a continuación para describir lo que hice. Si cree que no es correcto, agradecería sus comentarios. - Mike

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.