/ / Désactiver les gestes tactiles sur le contrôleur de vue enfant? Comment déterminer S'agit-il d'un PanGesture ou d'un TapGesture? - ios, objective-c, xcode, cacao-touch, uigesturerecognizer

Désactiver Tap Gesture sur Child View Controller? Comment déterminer Est-ce un PanGesture ou un TapGesture? - ios, objectif-c, xcode, cacao-touch, uigesturerecognizer

Tout.

Dans mon application iOS 8.0.

Dans une architecture de vue parent-enfant. Par ce code ...

[self addChildViewController:slideTableViewController];
[self.view addSubview:slideTableViewController.view];
[slideTableViewController didMoveToParentViewController:self];

J'ai implémenté TapGesturerecognizer & PanGesturerecognizer sur le contrôleur de vue de base.

Ainsi, il peut reconnaître le panoramique (glisser) et le toucher. J'ai besoin des deux gestes sur mon BaseView.

Il suffit de ne pas vouloir toucher le geste SlideView. Comme je veux exécuter la méthode didSelectRowAtIndexpath sur la vue enfant,

Solution:

Réponse à la question 1: Beaucoup de réponses StackOverflow ont le même fond. Désactiver le geste de toucher lorsque votre contact rencontre une vue enfant.

if([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){
if(CGRectContainsPoint(slideTableViewController.view.frame,[touch locationInView:self.view])){
return NO;
}
}

Réponse à la question 2:

Comment déterminer S'agit-il d'un PanGesture ou d'un TapGesture?

Pour chaque type de geste que la méthode déléguée appellera

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

Si vous avez implémenté deux gestes dans votre vue, le geste panoramique et le geste tactile,

Cette méthode appelle 2 fois, 1 fois pour un geste panoramique et 1 fois pour un geste tactile.

Donc, dans cette méthode, vous pouvez vérifier comme isKindOfClass méthode.

Merci beaucoup pour votre aide......

entrer la description de l'image ici

Réponses:

2 pour la réponse № 1

Vous pouvez implémenter la méthode déléguée du geste dans votre baseViewController :

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizershouldReceiveTouch:(UITouch *)touch {
return touch.view == self.view;
}

OU // S'il s'agit d'un geste de tapotement et que votre touche intersecte une vue particulière, nous avons cette méthode.

if([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){
if(CGRectContainsPoint(slideTableViewController.view.frame,[touch locationInView:self.view])){
return NO;
}
}

4 pour la réponse № 2

Juste mettre tapGesture.cancelsTouchesInView = YES;


0 pour la réponse № 3

J'ai fait cela dans UIViews et j'espère que cela pourrait vous aider:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

UITouch *touch = [touches anyObject];
[touch locationInView:self.view];
if(touch.view == self.topView )
{
//just return
}
if(touch.view == SOSTopView )
{
//just return
}
}

0 pour la réponse № 4

On dirait que vous devriez implémenter cette méthode de UITableViewDelegate:

- (NSIndexPath *)tableView:(UITableView *)tableView
willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// you can add some logic here
return nil;
}

Cela empêchera de sélectionner des lignes.


-1 pour la réponse № 5

Il n'y a pas un userInteractionEnabled propriété que vous pouvez utiliser? Donc, vous pouvez faire ce qui suit:

slideTableViewController.userInterationEnabled = NO;