¿Cómo descartar el teclado para UITextView con la tecla de retorno?

Resuelto Chilly Zhong asked hace 15 años • 34 respuestas

En la biblioteca de IB, la introducción nos dice que cuando returnse presiona la tecla, el teclado UITextViewdesaparecerá. Pero en realidad la returnclave sólo puede actuar como '\n'.

Puedo agregar un botón y usarlo [txtView resignFirstResponder]para ocultar el teclado.

¿Pero hay alguna manera de agregar la acción para la returntecla en el teclado para que no tenga que agregarla UIButton?

Chilly Zhong avatar Apr 01 '09 08:04 Chilly Zhong
Aceptado

Pensé que publicaría el fragmento aquí mismo:

Asegúrese de declarar su apoyo al UITextViewDelegateprotocolo.

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {

    if([text isEqualToString:@"\n"]) {
        [textView resignFirstResponder];
        return NO;
    }

    return YES;
}

Actualización rápida 4.0:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if text == "\n" {
        textView.resignFirstResponder()
        return false
    }
    return true
}
samvermette avatar May 21 '2010 03:05 samvermette

UITextViewno tiene ningún método que se llame cuando el usuario presione la tecla de retorno. Si desea que el usuario pueda agregar solo una línea de texto, utilice un archivo UITextField. Pulsar el botón de retorno y ocultar el teclado durante un UITextViewno sigue las pautas de la interfaz.

Incluso entonces, si desea hacer esto, implemente el textView:shouldChangeTextInRange:replacementText:método de UITextViewDelegatey en ese caso verifique si el texto de reemplazo es \n, oculte el teclado.

Puede que haya otras formas, pero no conozco ninguna.

lostInTransit avatar Apr 01 '2009 05:04 lostInTransit

Sé que esto ya ha sido respondido, pero no me gusta mucho usar la cadena literal para la nueva línea, así que esto es lo que hice.

- (BOOL)textView:(UITextView *)txtView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if( [text rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet]].location == NSNotFound ) {
        return YES;
    }

    [txtView resignFirstResponder];
    return NO;
}

Actualización rápida 4.0:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if (text as NSString).rangeOfCharacter(from: CharacterSet.newlines).location == NSNotFound {
    return true
}
txtView.resignFirstResponder()
return false
}
ribeto avatar Jun 30 '2011 16:06 ribeto