2010-09-30 6 views
1

J'ai un parent UIView avec 2 sous-vues: un UIButton et un UIScrollView avec un UITapGestureRecognizer implémenté. UITapGestureRecognizer est utilisé pour zoomer et dézoomer le scrollview et le bouton est utilisé pour afficher/cacher du texte.Pourquoi un UIButton remplace-t-il UITapGestureRecognizer?

Mon problème est qu'une fois que j'ai utilisé UIButton, le UITapGestureRecognizer ne fonctionne plus.

En outre, UITapGestureRecognizer est implémenté à partir de la classe pour le scrollView, ce qui est nécessaire pour calculer le zoomScale correctement.

J'ai trouvé quelques questions similaires, sauf qu'elles avaient le problème inverse. Des idées?

Merci!

Édition: Je viens de me rendre compte qu'après avoir utilisé le bouton, si je fais défiler ou pincer/zoomer dans le scrollView, puis appuyez sur, cela fonctionne à nouveau. Cela ne fonctionne tout de suite pas après l'utilisation du bouton.

Aussi, voici mon code pour savoir comment le bouton montre la vue du texte:

- (void)textImageButtonAction:(id)sender{ 
    if(self.textView.frame.origin.y < 0){ 
     [UIView beginAnimations:@"HideTabbar" context:nil]; 
     [UIView setAnimationDuration:.3]; 
      textView.frame = CGRectMake(0.0, 0.0, self.view.frame.size.width, footerStringSize.height +10); 
     [UIView commitAnimations]; 
    } 
    else if(self.textView.frame.origin.y == 0) {//If the textView is visible 
     [UIView beginAnimations:@"HideTabbar" context:nil]; 
     [UIView setAnimationDuration:.3]; 
      textView.frame = CGRectMake(0, -footerStringSize.height -10, self.view.frame.size.width, footerStringSize.height +10); 
     [UIView commitAnimations]; 
    } 
} 
+0

Que fait UIButton? – Jordan

+0

Le bouton est utilisé pour afficher/masquer du texte dans un autre sous-onglet qui glisse dans et hors. – Jonah

+0

Comment la sous-vue est-elle affichée et supprimée? Cela peut être votre problème. Postez le code. – Jordan

Répondre

0

J'ai finalement demandé l'assistance technique Apple Developer pour ce problème et ils ont regardé mon code. La cause du problème s'est révélée être des reconnaissances de gestes contradictoires dans différentes classes. C'était un problème de premier répondeur, mais pour une raison quelconque, resignFirstResponder et becomeFirstResponder n'a eu aucun effet.

J'ai dû restructurer le code et comment les reconnaisseurs de mouvements ont été organisés pour le faire fonctionner correctement.

Merci à tous pour votre aide.

1

Si vous démissionnez premier intervenant après que le bouton a fait son devoir pour que le point de vue que le bouton est en n'est plus contrôle.

Que diriez-vous d'ajouter: bringSubviewtoFront: scrollview

à la fin de votre code UIButton. L'idée ici est de faire de votre scrollview la vue la plus avancée; ce qui est ce que je pense qui se passe quand vous touchez le scrollview et réactivant ainsi le reconnaisseur de gestes

+0

Ce que je pensais aussi bien. Mais ça ne marche pas. J'ai essayé d'ajouter \t [textImageButton resignFirstResponder]; à la fin de textImageButtonAction sans effet. – Jonah

+0

Le fait de placer la sous-vue à l'avant ne fait que masquer les boutons et ne réactivera pas l'identificateur gesturer. J'ai également essayé d'appeler: [self scrollViewDidScroll: myScrollView]; mais ça ne marche pas non plus. – Jonah

1

Avez-vous essayé d'appeler [scrollView becomeFirstResponder]? Cela devrait le faire fonctionner.

+0

Oui, cela ne faisait aucune différence. Merci pour la suggestion cependant. – Jonah

+0

J'ai eu des problèmes comme ça en utilisant des vues modales. Est-ce que vous faites défiler la vue présentée de façon modale? – jv42