2012-07-30 4 views
6

Ich habe stundenlang auf Google und Stackoverflow gesucht, probiert aber kein Glück.Wie didSelectRowAtIndexPath-Methode mit UITapGestureRecognizer aufrufen?

Ich habe eine UITableView tblDepartment und eine UISearchBar studentSearch darüber.

füge ich eine UITapGestureRecognizer die Tastatur aus studentSearch Textbox zu entlassen, wenn Benutzer außerhalb des Suchfeld tippen:

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

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

Danach wird das Verfahren didSelectRowAtIndexPath:(NSIndexPath *)indexPath nicht mehr aufgerufen wird, wenn ich Zeile in tblDepartment wählen. Ich weiß gestureRecognizer ist der Grund.

Also, wie kann ich die Tastatur ausblenden und immer noch zulassen, dass Benutzer Zeile auswählen?

habe ich versucht, diesen Code, aber es hat nicht funktioniert:

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

Können Sie die Gestenerkenner entfernen und Ersthelfer von 'tableView: didSelectRowAtIndexPath:' stattdessen zurücktreten? – dasblinkenlight

+1

Versuchen Sie, Ihre Gestenerkennung nach dem 'resignFirstResponder' zu entfernen. – ohr

+0

@dasblinkenlight: Vielen Dank für Ihren Kommentar. Die 'tblDepartment' hat etwa 7 Zeilen und die Tastatur überlappt sie beim Anzeigen. Ich möchte, dass Benutzer Zeilen auswählen können, wenn sie nicht suchen möchten. Wenn sie also außerhalb des Suchfelds tippen, wird die Tastatur geschlossen und sie können die unteren Zeilen auswählen. –

Antwort

14

die Gestenerkenner cancelsTouchesInView Eigenschaft auf NO gesetzt, es ist ja standardmäßig es berührt vom Erreichen der zugrunde liegenden Ansichten verhindert, wenn der GR seiner Geste erkennt .

+1

Große Lösung. Vielen Dank. '[GestenRecognizer setCancelsTouchesInView: NO];' und es funktioniert! –

+0

Vielen Dank wirklich Sie haben meine Zeit gespeichert :) Ich schrieb wie folgt tap.cancelsTouchesInView = NO; –