Même si je suis sûr que vous allez dans ce sens, en ajoutant un double reconnaissance de gestes à un UIButton, vous pouvez toujours effectuer la tâche dont vous avez besoin et qui ne devrait pas l'être. beaucoup de travail pour vous. Vous avez fait le commentaire
et comment pourrais-je me souviens si je crée disons 100 boutons
à l'une des réponses, celle qui met en évidence ce que le problème est que ce qui cause votre SIGBART. UIGestureRecognizer n'a pas de propriété de balise. Voici ce que vous pouvez faire, parcourir tous les sous-aperçus de votre [vue personnelle] et trouver celui qui a le même UIGestureRecognizer, ce n'est pas la plus jolie solution, et plus vous aurez de sous-vues, plus la boucle sera longue prendre. Mais ça va faire ce que vous cherchez, donc si vous ajoutez.
Dans votre fonction handleDoubleTap que vous pourriez faire la
suivante
-(void) handleDoubleTap:(UITapGestureRecognizer *)sender
{
if(sender.state == UIGestureRecognizerStateEnded)
{
int iButtonTag = -1 //This is important later to escape the below for loop as we don't need to needlessly go around in circles
for(UIView* psubView in [[self view] subviews])
{
if([psubView isKindOfClass:[UIButton class]])
{
UIButton* pButton = (UIButton*)psubView;
for(UIGestureRecognizer* pGesture in [pButton gestureRecognizers])
{
if(pGesture == sender)//this is the button we're after
{
iButtonTag = [pButton tag];
break;
}
}
if(iButton != -1)//found what we came for
{
break;
}
}
}
//do what ever it was you needed to do now that you have the views tag, or you could have kept a reference to the button etc.
}
}
Cela devrait résoudre votre problème. Alternativement, si vous allez ajouter des boutons aux sous-vues des sous-vues, il serait préférable de garder une trace de vos UIButtons dans un NSMutableArray, vous le feriez en créant une propriété de classe (ou une variable membre) et en ajoutant les boutons en utilisant 'addObject:' fonction de NSMutableArray. Alors, au lieu de la ligne
for(UIView* psubView in [[self view] subviews])
ci-dessus vous pourriez échanger que pour
for(UIButton* pButton in m_pMutableButtonArray)
où « m_pMutableButtonArray » est le nom de la variable que vous avez donné à votre NSMutableArray vous stockez les UIButtons. Cela signifie aussi que vous auriez supprimez le test suivant si isKindOfClass sur la ligne suivante.
Cela devrait résoudre votre problème.
et comment je me souviens si je crée disons 100 boutons.Je me souviens en utilisant TAG.C'est pourquoi j'utilise tag ... pour se souvenir du bouton :) – adrian
Vous pourriez sous-classe UIGestureRecognizer, en ajoutant la propriété myButton et définir lors de l'attribution du reconnaisseur de geste à un bouton. Vous pouvez ensuite convertir le UIGestureRecognizer que vous obtenez en tant qu'expéditeur en MyGestureRecognizer et obtenir la propriété myButton. Ou vous créez une variable de classe NSMutableDictionary et définissez le bouton en tant que valeur pour les reconnaisseurs de mouvements en tant que clé, par ex. [allMyGestureRecognizerButtons setObject: buttonPlaylistView forKey: doubleTap3] - alors vous obtenez le bouton en utilisant l'expéditeur comme clé dans le dictionnaire. – TheEye
Vous pouvez également encore obtenir un seul robinet sur votre bouton (pas sûr, mais vous pouvez vérifier) et rappelez-vous quel bouton a été tapé en dernier ... – TheEye