web-dev-qa-db-fra.com

Comment rendre le bouton "Terminé" UITextView en mode resignFirstResponder?

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?

21
Jason

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:

  1. UITextViewDelegate est-il spécifié Dans .h
  2. Implémentez la méthode déléguée Pour uitextview: TextViewShouldEndEditing, retournez YES
  3. assurez-vous que votre .m (contrôleur) est le délégué pour uitextview dans IB
  4. resignFirstResponder devrait maintenant fonctionner.
12
Jordan

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.

87
Rich Lowenberg

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
    }
}
0
Axel Guilmin