2012-07-30 11 views
6

Ho cercato per ore su Google e StackOverflow, li ho provati ma senza fortuna.Come chiamare il metodo didSelectRowAtIndexPath con UITapGestureRecognizer?

Ho un UITableView tblDepartment e una UISearchBar studentSearch sopra di esso.

aggiungo un UITapGestureRecognizer per chiudere la tastiera dal studentSearch testo quando gli utenti toccano al di fuori della casella di ricerca:

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

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

Dopo di che, il metodo didSelectRowAtIndexPath:(NSIndexPath *)indexPath non è chiamato più quando seleziono fila in tblDepartment. So che il motivo è gestureRecognizer.

Quindi, come posso nascondere la tastiera e consentire all'utente di selezionare la riga?

Ho provato questo codice, ma non ha funzionato:

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

Si può rimuovere il riconoscitore di gesti e abbandonare il primo risponditore da 'tableView: didSelectRowAtIndexPath:'? – dasblinkenlight

+1

Prova a rimuovere il tuo riconoscimento di gesto dopo 'resignFirstResponder' – ohr

+0

@dasblinkenlight: Grazie per il tuo commento. Il 'tblDepartment' ha circa 7 file e la tastiera si sovrappone quando vengono visualizzate. Voglio che gli utenti siano in grado di selezionare le righe se non vogliono effettuare la ricerca :) Quindi quando toccano fuori dalla casella di ricerca, la tastiera viene chiusa e possono selezionare le righe inferiori. –

risposta

14

impostare la proprietà gesto riconoscitore cancelsTouchesInView su NO, è YES per impostazione predefinita, impedisce tocchi di raggiungere il punto di vista sottostanti se il GR riconosce il suo gesto .

+1

Ottima soluzione. Grazie. '[gestureRecognizer setCancelsTouchesInView: NO];' e funziona! –

+0

Grazie davvero mi hai salvato il mio tempo :) Ho scritto così tap.cancelsTouchesInView = NO; –

Problemi correlati