/ / séparateurs de gestes tactiles séparés dans en-tête uitableview - ios, iphone, objectif-c, xcode, uitableview

reconnaisseurs de gestes tactiles séparés dans l'en-tête uitableview - ios, iphone, objectif-c, xcode, uitableview

Existe-t-il une solution simple pour ajouter plusieursUITapGestureRecognizers? J'ai un en-tête de vue de table qui contient un UIImageView. Autour des bords de la vue de l’image, il ya un espace vide pour l’en-tête. Ce que je cherche à réaliser est d’ajouter une méthode de tap pour l’en-tête et une méthode de tap pour la vue image. Mais l'ajout d'un à l'en-tête utilise tout l'en-tête, y compris la vue de l'image. Y a-t-il un moyen de les séparer?

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UIView *header = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 250)];
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(35, 10, 250, 250)];
_imageView = imageView;
_imageView.image = imageData;
UITapGestureRecognizer *headerTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(headerTapped:)];
_headerTap = headerTap;
UITapGestureRecognizer *imagetap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(imageTapped:)];
_imagetap = imagetap;
[header addGestureRecognizer:_headerTap];
[_imageView addGestureRecognizer:_imagetap];
[header addSubview:_imageView];
return header;
}

Réponses:

3 pour la réponse № 1

Faites un bouton transparent couvrant l'en-tête entier.
Placez la vue d’image au-dessus et couvrez-la avec un autre bouton transparent.


1 pour la réponse № 2

Vous pouvez accomplir cela en écoutant les méthodes de délégation du logiciel de reconnaissance de geste. En fonction de la configuration de vos vues, vous pouvez utiliser

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

à voir décidez si vous voulez que votre appareil de reconnaissance se déclenche. Par exemple, nous avons une application avec une table déroulante pour effectuer des sélections. Nous avons installé deux identificateurs, l'un sur la fenêtre, de manière à pouvoir "dérouler" le menu déroulant lorsque l'utilisateur appuie dessus, et l'autre sur le "bouton" qui n'est que le contenu d'une cellule. Nous utilisons cette méthode pour déterminer si le contact était en dehors de nos vues de table visibles et si nous le rejetons.

L'autre méthode de délégué pertinente est

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

D'après votre description, cela semble être le meilleur à utiliser. À partir de là, vous pouvez indiquer à votre en-tête de reconnaissance de geste de ne pas tirer à côté de celui affiché sur votre image. Par exemple

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
if (gestureRecognizer == self.headerGestureReconizer && otherGestureRecognizer == self.imageViewGestRecognizer) {
return NO;
}

return YES;
}

Vous pouvez également configurer des dépendances dans les identificateurs de mouvements via la méthode d'instance. (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer. C’est très utile lorsque vous avez quelque chose comme un tapotement simple et un reconnaisseur de tapotement double sur la même vue et que vous n’êtes pas ce que vous voulez dans cette situation.