2011-06-06 5 views
3

Je veux ajouter un * UITapGestureRecognize * r à mon UITextView, parce que je veux fermer un « Popup » où le TextView est. Je veux que la méthode « cacher » des la classe Popup est appelée lorsque le T * extView * est tapé. Je l'ai essayé comme suit, mais il ne fonctionne pas pour une raison quelconque:Ajouter TapGestureRecognizer à UITextView

UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(show)]; 
[gr setNumberOfTapsRequired:1]; 
[viewText addGestureRecognizer:gr]; 

Je ne veux pas aussi de créer une sous-classe, parce que je alors besoin d'appeler le -method « parent » "cacher". Peut-être que vous êtes maintenant une bonne solution pour ce problème.
Merci d'avance.

Répondre

2

Vous ne devez pas utiliser UITapGestureRecognizer mais utiliser UITextFieldDelegate.

Vous pouvez lire ici:

http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UITextViewDelegate_Protocol/Reference/UITextViewDelegate.html%23//apple_ref/doc/uid/TP40006897

Vous devez basiquement ajouter le UITextViewDelegate à votre fichier .h comme ça -

@interface MyViewController : UIViewController<UITextViewDelegate> 

Ensuite, attribuez votre contrôleur en tant que délégué :

viewText.delegate =self; 

utiliser maintenant l'une des méthodes de délégation, peut-être:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView{ 

    // Do what you need to do... 

} 

Modifier

Eh bien je peux penser à 2 approches supplémentaires:

  1. Vous pouvez envelopper votre textView dans un UIView et ajouter UITapGestureRecognizer à la vue.
  2. Vous pouvez utiliser:

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
        UITouch *touch = [touches anyObject]; 
        CGPoint location = [touch locationInView:textView]; 
    
        //Checks if the tap was inside the textview bounds 
        if (CGRectContainsPoint(textView.bounds, location)){ 
         //do something 
        } 
    } 
    

Bonne chance

+0

Bonjour, merci pour votre réponse, mais cela ne fonctionne pas. Si je tape sur le TextView, la méthode Delegate-TextViewShouldBeginEditing n'est pas appelée (j'ai ajouté un NSLog). Il n'y a pas quelque chose comme un textViewTouchesEndes ou quelque chose, non? –

+0

essayez de définir [textView seteditable: yes]; ? – shannoga

+0

Hm, ne fonctionne pas et n'est pas voulu (ne devrait pas être modifiable). N'y a-t-il pas un moyen de faire fonctionner le GestureRecognizer ?? –

0

Est-ce que vous essayez de NSLog sur la méthode d'exposition? ou as-tu même déclaré et écrit la méthode "show"? Ça devrait marcher et c'est comme ça que je l'ai fait sur mon texte.

PS ne pas oublier de libérer votre instance de geste (gr) après avoir ajouté le textview: D

0

J'ai eu des problèmes majeurs à obtenir ce travail aussi, mais j'eu un problème stupide, l'interaction utilisateur a été désactivé dans le éditeur visuel. Espérons que cela aide quelqu'un :)

Questions connexes