2017-09-06 2 views
0

J'ai implémenté UITableView où chaque cellule contient des boutons Pour détecter si l'utilisateur appuie sur la table j'ai ajouté UITapGestureRecognizer.UITapGestureRecognizer n'annule pas le tap sur les éléments UITableView

Je veux que les boutons dans les cellules ne fassent rien lorsque l'utilisateur tape dessus. J'ai mis en place ce sélecteur:

- (void) backgroundTouched:(UITapGestureRecognizer*)sender { 
    UIView *view = sender.view; 
    NSLog(@"backgroundTouched %@", view); 
} 

Je vois que quand je tape partout sur la table ce sélecteur est appelé, sauf si je tape sur l'un des boutons contenus dans le UITableViewCell.

Comment puis-je éviter cela?

Voici le code qui crée la UITapGestureRecognizer:

pragma mark UISearchControllerDelegate 

- (void)didPresentSearchController:(UISearchController *)searchController 
{ 
    NSLog(@"didPresentSearchController"); 
    self.cancelGesture = [UITapGestureRecognizer new]; 
    [self.cancelGesture addTarget:self action:@selector(backgroundTouched:)]; 
    self.cancelGesture.cancelsTouchesInView = YES; 
    [self.tableView addGestureRecognizer:self.cancelGesture]; 
} 
+0

Pl. effacer votre inquiétude, vous voulez désactiver le robinet sur la table ou le bouton? – Krunal

+0

Bouton Désactiver. En ce moment, quand j'appuie sur le bouton, l'action est appelée et le sélecteur de gestes ne l'est pas. Je veux l'inverse – RuLoViC

Répondre

1

Si vous ne voulez pas que vos boutons pour faire quoi que ce soit, désactivez la userInteractionEnabled du bouton.

cell.addCashButton.userInteractionEnabled = NO; 
+0

Cela fonctionne. Bien que cela ne me semble pas une solution très élégante car je dois activer/désactiver pour chaque cellule en fonction de searchController est actif ou non – RuLoViC

0

Ma suggestion:

Table dispose de son propre centre d'action tactile utiliser de méthode déléguée didSelectRowAtIndexPath

Et si vous utilisez UIButton dans la cellule personnalisée alors au lieu de UITapGestureRecognizer vous pouvez ajouter une méthode d'action de bouton dans cellForRowAtIndexPath avec le bouton tag comme ci-dessous

en cellForRowAtIndexPath méthode

cell.yourButton.tag = indexPath.row 
[cell.yourButton addTarget:self action:@selector(myButtonActionMethod:) forControlEvents:UIControlEventTouchUpInside] 

Et déclarer méthode d'action bouton

-(void) myButtonActionMethod:(UIButton*)sender 
{ 
    NSLog(@"you clicked on button %@", sender.tag); 
}