iOS ajoutant tapGesture à plusieurs vues
J'ai plusieurs vues de mon écran principal. Je veux ajouter un seul robinet geste à tous ces points de vue. Ci-dessous le code que j'ai écrit, mais il enregistre un robinet geste à la dernière vue que je peux ajouter. Ainsi, dans le code ci-dessous, appuyez seulement pour messagesView
& pas pour d'autres points de vue. J'ai 2 questions:
-
Comment puis-je enregistrer le même tapGesture à de multiples points de Vue?
-
Supposons-je obtenir ce travail, maintenant, tous les robinets simples à partir de ces points de vue goto la même fonction appelée
oneTap
. Dans cette fonction, comment puis-je distinguer de quel point de vue le robinet est à venir?
Code:
@synthesize feedsView, peopleView, messagesView, photosView;
- (void)viewDidLoad
{
[super viewDidLoad];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneTap:)];
[singleTap setNumberOfTapsRequired:1];
[singleTap setNumberOfTouchesRequired:1];
[feedsView addGestureRecognizer:singleTap];
[peopleView addGestureRecognizer:singleTap];
[messagesView addGestureRecognizer:singleTap];
//[photosView addGestureRecognizer:singleTap];
[singleTap release];
return;
}
source d'informationauteur Srikar Appalaraju
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème, alors qu'il a seulement ajouté à la dernière vue. Il pourrait y avoir une meilleure solution, mais je viens de créer un tag geste pour chaque vue et liée à la même sélecteur de méthode (
oneTap:
dans votre cas). Afin de distinguer la vue activée, la méthode, vous pouvez simplement marquer vos points de vue,feedsView.tag = 0; peopleView.tag = 1;
et ainsi de suite. Puis, lorsque la méthode est appelée:Pouvez-vous joindre une UIGestureRecognizer à de multiples points de vue? Pas.
Deux options:
a) Donner à chaque
UIGestureRecognizer
sa propre action. Les avantages de cette approche: fort découplage. Inconvénients: plus la réutilisation de code. Mais, vous pouvez limiter la réutilisation de code par la création de méthodes pour les fonctionnalités communes et il suffit d'appeler les méthodes dans les différentes actions.b) Donner à tous la vue à laquelle vous ajoutez un
UIGestureRecognizer
une étiquette unique. Ensuite, utilisez une instruction switch dans l'action commune avec l'expéditeur de la vue de l'étiquette selon le cas. Avantages: moins de réutilisation du code. Inconvénients: le resserrement de couplage. Quelque chose comme ceci:Alors:
Bien qu'il est généralement préférable d'aller avec l'option qui découple, si toutes vos actions sont très similaires, ce qui semble être le cas ici, et vous êtes tout à fait sûr qu'ils vous restent très similaires à l'avenir, l'option b) avec les balises est probablement le meilleur choix.
P. S. Il n'est pas nécessaire de définir explicitement
numberOfTapsRequired
&numberOfTouchesRequired
à1
car ils sont tous les deux définis à1
par défaut. Vous pouvez le vérifier en maintenant les touches Commande et en cliquant surnumberOfTapsRequired
dans Xcode.1 utilisation de la méthode hitTest:
2 ajoutez LE Seul TapGesture à de multiples points de vue, seuls les derniers travaillé.
//Ajout d'un robinet geste rapide 4
//UTILISATION en vue a la charge:
tapGestures(voir: vue1)
tapGestures(voir: vue2)
tapGestures(voir: vue3)