2010-11-16 36 views
2

J'ai un champ de texte qui cache le clavier lorsque je touche quelque part ailleurs sur l'écran (via ma fonction TouchesBegan et démissionner ... blah). Mais quand je touche une Textview, le TouchesBegan n'est pas invoqué et le clavier ne se cache pas! Est-il possible d'invoquer TouchesBegan pour cacher le clavier?Iphone Textview n'invoque pas TouchesBegan

+0

Vous souhaitez masquer le clavier lorsque l'utilisateur appuie sur l'ensemble de l'écran avec le texteFichier? –

Répondre

2

Il existe également un moyen facile de masquer le clavier sur touchesBegan: lorsque vous utilisez UITextView pour entrer les données. Étape 1. Assurez-vous d'avoir étendu Textviewdelegate pendant la déclaration de classe.

@interface YourClassName: UIViewController { IBOutlet UITextView * txtMyView; }

étape 2. définir le délégué à la fonction de chargement automatique.

- (void)viewDidLoad 
{ 
    txtMyView.delegate = self; 
} 

étape 3. écrivez le code similaire dans la fonction touchesbegan avec votre nom textView.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
            [txtMyView resignFirstResponder]; 
     [super touchesBegan:touches withEvent:event]; 

} 

Merci et salutations.

+1

J'ai essayé cette méthode mais mon textview n'a jamais appelé touchesBegan ... seulement en touchant les étiquettes/espace vide les touches ont commencé à fonctionner: O. – Exegesis

2

La meilleure méthode que j'ai vu pour cela est d'ajouter une sous-vue transparente qui recouvre la vue de texte et gère le TouchesBegan en premier. Vous pouvez ensuite détecter les touches situées en dehors du champ de texte et fermer le clavier en faisant en sorte que le champ de texte soit résilié en tant que premier répondeur. Par exemple, créez la sous-vue de surimpression dans IB ou par programme, de toute façon. Placez-le et taillez-le de sorte qu'il couvre la (les) vue (s) de texte et donnez-lui une couleur claire. Si vous ajoutez la vue par IB, cacher lorsque vos principales charges de vue afin qu'il n'absorbe pas touche juste encore, comme ceci:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    overView.hidden = YES; 
} 

Ensuite, lorsque le champ de texte commence l'édition, réafficher la vue:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    overView.hidden = NO; 
} 

lorsque le champ de texte se termine l'édition, la vue masquez à nouveau:

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    overView.hidden = YES; 
} 

Ajouter un touchesBegan pour détecter lorsque votre unhidden est touché vUE d'ENSEMBLE:

Vous pouvez également le faire par le biais de gestes personnalisés, mais cela ne fonctionne qu'avec iOS 4.x et, à mon avis, est plus compliqué.

2

Je suppose que votre UITextView n'est pas modifiable car vous ne voulez pas que le clavier apparaisse lorsque vous le touchez, alors assurez-vous dans les propriétés de View pour votre UITextView que "User Interaction Enabled" n'est pas cochée. Vous pouvez également écrire dans votre ViewController en tant que tel:

textView.userInteractionEnabled = NO; 

Cela permettra événements utilisateur de passer à travers la superview et touchesBegan et les autres méthodes de délégués sera appelé.

+0

'userInteractionEnabled = false' ne fonctionne pas pour moi –