Clavier ignoré et problème tactile UITableView

J'ai donc cette UITableView qui contient peu de lignes, quand on clique sur une ligne, un autre UIViewController est poussé avec les détails de ligne spécifiques. Mon problème est que je veux rejeter le keyboard avec n'importe quel contact sur l'écran (également sur UITableView ), mais quand je le fais, et click la ligne UITableView , le keyboard se didSelectRow , mais la méthode didSelectRow ne fonctionne pas. Il ne poussera pas le nouveau ViewController une fois cliqué sur la cellule.

De même dans l'autre sens, une fois que je l'ai changé, vous pouvez cliquer sur la cellule TableView, le keyboard se fermer et l'autre ViewController est poussé, mais le toucher sur n'importe quel autre endroit ne supprime pas le keyboard.

Que devrais-je faire?

 - (IBAction)hideKeyboard:(id)sender { [tfFoodsSearchQuery resignFirstResponder]; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view isKindOfClass:[UITableView class]]) { // we touched a button, slider, or other UIControl return YES; // handle the touch } NSLog(@"Touch"); return NO; // ignore the touch } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard:)]; [self.view addGestureRecognizer:tap]; UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard:)]; gestureRecognizer.delegate = self; [self.tvFoods addGestureRecognizer:gestureRecognizer]; } 

Merci!

set

 [gestureRecognizer setCancelsTouchesInView:NO]; 

et au lieu de l'append à tvFoods, ajoutez à self.view entier, ainsi il n'affectera pas les définitions substituées.

également, supprimez le délégué shouldReceiveTouch, il n'est pas nécessaire

En utilisant l'astuce de whiteagle, j'utilise le code suivant pour piéger un seul tap pour fermer le keyboard dans un UITableView. Il fait passer le robinet et permet toujours de sélectionner une rangée. Dans mon cas, le robinet étant traversé triggers un sélecteur de date en ligne à afficher.

  -(void)viewDidLoad { UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]; [singleTap setNumberOfTapsRequired:1]; [singleTap setNumberOfTouchesRequired:1]; [singleTap setCancelsTouchesInView:NO]; [self.view addGestureRecognizer:singleTap]; singleTap = nil; } // -(IBAction)hideKeyboard { [activeTextField resignFirstResponder]; }