J'essaie de faire que ma UITextView
éditable résigne le clavier (resignFirstResponder
) lorsque l'utilisateur appuie sur "Terminé". En utilisant UITextField
, j'ai pu le faire avec le code suivant:
- (IBAction)doneEditing:(id)sender {
[sender resignFirstResponder];
}
... puis attachez-le à la UITextField
correspondante dans Interface Builder à l'action "Did End on Exit".
Cependant, avec un UITextView
, il semble que je ne puisse pas accéder à l'action "Did End on Exit". Des suggestions sur la façon de faire cela?
nouvelle réponse
Sur votre vue, vous auriez un UIBarButton ("Terminé") connecté à IBAction ci-dessous:
- (IBAction)doneEditing:(id)sender {
[textView resignFirstResponder];
}
Où textView est votre sortie textView définie dans votre fichier .h et connectée dans un fichier Storyboard ou .xib. Comme ça:
@property (retain, nonatomic) IBOutlet UITextView *textView;
old Answer
Vérifiez les points suivants:
La réponse acceptée n'a pas fonctionné pour moi. Au lieu de cela, la méthode déléguée suivante doit être appelée comme ceci:
- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if([text isEqualToString:@"\n"]){
[textView resignFirstResponder];
return NO;
}else{
return YES;
}
}
Collez-le dans la classe que vous attribuez au délégué UITextView pour que cela fonctionne.
Vous pouvez implémenter UITextViewDelegate
et attendre "\ n", dans Swift 4:
myTextView.delegate = self
// ...
extension MyViewController : UITextViewDelegate {
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text == "\n" {
textView.resignFirstResponder()
return false
}
return true
}
}