Cómo hacer UITextView botón «Done» resignFirstResponder?

Estoy tratando de hacer mi editable UITextView renunciar al teclado (resignFirstResponder) cuando el usuario pulsa «Hecho». El uso de un UITextField, he sido capaz de hacerlo con el siguiente código:

- (IBAction)doneEditing:(id)sender {
    [sender resignFirstResponder];
}

… y, a continuación, adjuntar a la correspondiente UITextField en el Interface Builder para la acción «Hizo Final en la Salida.»

Sin embargo, con un UITextView, me parece que no puede acceder a la «Final en la Salida» de la acción. Alguna sugerencia sobre cómo hacer que esto suceda?

InformationsquelleAutor Jason | 2010-10-20

4 Kommentare

  1. 13

    nueva Respuesta

    En su punto de Vista, usted tendría una UIBarButton («Hecho») que está conectado a la IBAction a continuación:

    - (IBAction)doneEditing:(id)sender {
        [textView resignFirstResponder];
    }

    Donde textView es su textView de salida definido en su .h archivo y conectado en el Guión gráfico o .xib archivo. Como este:

    @property (retain, nonatomic) IBOutlet UITextView *textView;

    Respuesta anterior

    Compruebe lo siguiente:

    1. Es UITextViewDelegate especificado
      en .h
    2. Implementar el método de delegado
      para uitextview:
      textViewShouldEndEditing, volver SÍ
    3. asegúrese de que su .m (controlador) es el
      delegado para uitextview en IB
    4. resignFirstResponder ahora debe
      trabajo.
    • textViewShouldEndEditing NO se llama cuando el usuario presiona el Retorno/el botón Hecho en un UITextView, la comprobación de retorno de carro en shouldChangeTextInRange es la única manera
  2. 88

    Aceptado la respuesta no funcionó para mí. En su lugar, el siguiente método delegado debe ser invocado como este:

    - (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
        if([text isEqualToString:@"\n"]){
            [textView resignFirstResponder];
            return NO;
        }else{
            return YES;
        }
    }

    Pegar en la clase que usted asigna a ser el UITextView delegado y va a trabajar.

    • Esta respuesta sería negligencia toda la razón para usar un UITextView donde el usuario quiera añadir varias líneas que es lo que el botón de retroceso en el contexto de un UITextView.
    • Esa es la manera de hacerlo! El aceptó la respuesta NO funciona.
    • No creo que se aplica a este caso de uso, donde hay un deseo de tener varias líneas de texto y un botón hecho en el teclado. Para mí está claro que tener el botón Hecho de actuar como un botón de regreso en su lugar, va a ser pobre en la usabilidad.
    • Si el usuario copia, pega un retorno de carro en el textView de esta manera se consigue activa.
    • Buen punto de Albert – a pesar de que sólo sucederá si se pegue solamente un retorno de carro. Si hay otros personajes en la pasta entonces no va a desencadenar. Pero vale la pena ser consciente de. Teóricamente, si se refiere usted podría crear una personalizada UITextView y reemplazar el método de pegado, aunque para mí, probablemente no vale la pena.
    • increíble este es todavía un problema en el 2015
    • si usted escucha el \n palabra para juzgar si debe desaparecer la palabra clave, entonces usted podría encontrarse en una situación de bloqueo que usted va a despedir de teclado cada vez que cuando la entrada de nuevos linke

  3. 0

    Puede implementar UITextViewDelegate y esperar «\n», en 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
        }
    }
  4. -5

    Tener el botón hecho desestimar el teclado y resignFirstResponder que tienen que implementar un método de delegado.

    1. En su .h implementar el UITextFieldDelegate

      @interface YourViewController : UIViewController <UITextFieldDelegate>
    2. A continuación, implementar el textFieldShouldReturn en su .m

      -(BOOL) textFieldShouldReturn:(UITextField *)textField
      {
      [textField resignFirstResponder];
      return YES;
      }
    3. No se olvide de vincular el delegado de UITextField para el Dueño del archivo (muy importante)

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea