2012-07-30 31 views
6

He buscado durante horas en Google y Stackoverflow, las probé pero no tuve suerte.Cómo llamar al método didSelectRowAtIndexPath con UITapGestureRecognizer?

Tengo una UITableView tblDepartment y una UISearchBar studentSearch encima de ella.

agrego un UITapGestureRecognizer para ocultar el teclado de studentSearch cuadro de texto cuando los usuarios tocan fuera del cuadro de búsqueda:

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]; 
[self.tblDepartment addGestureRecognizer:gestureRecognizer]; 

- (void)hideKeyboard 
{ 
    [studentSearch resignFirstResponder]; 
} 

Después de eso, el método didSelectRowAtIndexPath:(NSIndexPath *)indexPath no se llama más cuando selecciono fila de tblDepartment. Sé que gestureRecognizer es la razón.

Entonces, ¿cómo puedo ocultar el teclado y todavía permitir al usuario seleccionar la fila?

yo probamos este código, pero no funcionó:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if ([touch.view isDescendantOfView:tblDepartment]) { 
     return NO; 
    } 
    return YES; 
} 
+0

¿Podría eliminar el reconocedor de gestos y renunciar al primer respondedor de 'tableView: didSelectRowAtIndexPath:' en su lugar? – dasblinkenlight

+1

Intente eliminar su reconocedor de gestos después del 'resignFirstResponder' – ohr

+0

@dasblinkenlight: Gracias por su comentario. El 'tblDepartment' tiene alrededor de 7 filas y el teclado se superpone cuando se muestra. Quiero que los usuarios puedan seleccionar filas si no quieren buscar :) Entonces, cuando tocan fuera del cuadro de búsqueda, el teclado se descarta y pueden seleccionar las filas inferiores. –

Respuesta

14

establecer la propiedad gesto reconocedor cancelsTouchesInView en NO, que es SÍ por defecto, se evita toques de llegar a los puntos de vista subyacentes si el GR reconoce su gesto .

+1

Gran solución. Gracias. '[gestureRecognizer setCancelsTouchesInView: NO];' ¡y funciona! –

+0

Gracias realmente me salvaste el tiempo :) Escribí así: tap.cancelsTouchesInView = NO; –

Cuestiones relacionadas