2009-09-21 5 views
3

J'ai une table et dans une des cellules je garde un UITextView. Lorsque l'utilisateur appuie dessus, le clavier apparaît. J'essayais différentes façons de m'en débarrasser. Ma première approche consistait à détecter un tap sur la cellule de table de l'UITextView, mais comme la vue de texte en prend la plus grande partie, elle ne convient pas. Puis j'ai essayé d'ajouter un bouton à la barre d'outils et à chaque fois que l'utilisateur appuie dessus, le clavier disparaît avec resignFirstResponder, mais cela ne fonctionnera pas. Il semble que seulement quand je suis dans la même vue que le UITextView resignFirstResponder fonctionne. Alors, comment puis-je me débarrasser du clavier à partir d'une vue différente?Impossible de se débarrasser du clavier dans UITextView

Merci.

Répondre

1

La méthode ci-dessous utilise la clé de retour pour fermer le clavier UITextView.

Dans votre contrôleur, définissez l'auto délégué du UITextView comme ceci:

myTextView.delegate=self; 

ajouter cette méthode:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range 
replacementText:(NSString *)text 
{ 
// Any new character added is passed in as the "text" parameter 
if ([text isEqualToString:@"\n"]) { 
    // Be sure to test for equality using the "isEqualToString" message 
    [textView resignFirstResponder]; 

    // Return FALSE so that the final '\n' character doesn't get added 
    return FALSE; 
} 
// For any other character return TRUE so that the text gets added to the view 
return TRUE; 
} 

Cela devrait fonctionner si vous n'êtes pas en utilisant la touche de retour en une vraie touche de retour (par exemple ajouter une nouvelle ligne).

+0

L'idée d'un UITextView ne supporte-t-elle pas plusieurs lignes? Sinon pourquoi ne pas simplement utiliser un UITextField? – PaulG

1

Que voulez-vous dire "ça ne marchera pas". Si txtView est votre UITe4xtView, voulez-vous dire que l'association du bouton avec une action qui a [txtView resignFirstResponder] ne fonctionnera pas? J'ai déjà utilisé ce code auparavant et cela fonctionne pour moi

+0

Je pense qu'il a quelque chose comme [auto resignFirstResponder] pour le bouton. Une clarification serait bonne. – Amagrammer

0

Sans connaître la taille des contrôles, ni l'intention, il est un peu difficile de faire une recommandation solide. Cependant, si vous cherchez une vue en lecture seule, pourquoi ne pas envisager UILabel? S'il contient beaucoup de texte en lecture seule et que vous avez besoin d'un formatage complet, envisagez une UIWebView avec votre formatage.

Bien sûr, cette réponse pourrait être complètement inappropriée. Pouvez-vous clarifier vos intentions, peut-être montrer une capture d'écran de l'app-in-progress (inexploitée, bien sûr)?

-1

je l'ai utilisé pour ce genre de problème, la méthode que vous avez choisi

- (BOOL)textFieldShouldReturn: tf_some_text_field { 

[tf_some_text_field resignFirstResponder]; 
[tf_another_text_field_in_the_same_view resignFirstResponder]; 

return YES; 
} 

espère que cela aide ...

+0

Je pense que votre implémentation fonctionne uniquement pour UITextField, pas pour UITextView. –

+0

Cela fonctionne aussi pour textField –

0

essayer décochant l'option « éditable » dans le texte Attributs de vue fenêtre dans Interface Builder .

cela stoppe le clavier d'apparaître si l'utilisateur clique sur votre TextView

Questions connexes