¿Cómo descartar el teclado para UITextView con la tecla de retorno?
En la biblioteca de IB, la introducción nos dice que cuando returnse presiona la tecla, el teclado UITextView
desaparecerá. 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
?
Pensé que publicaría el fragmento aquí mismo:
Asegúrese de declarar su apoyo al UITextViewDelegate
protocolo.
- (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
}
UITextView
no 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 UITextView
no sigue las pautas de la interfaz.
Incluso entonces, si desea hacer esto, implemente el textView:shouldChangeTextInRange:replacementText:
método de UITextViewDelegate
y en ese caso verifique si el texto de reemplazo es \n
, oculte el teclado.
Puede que haya otras formas, pero no conozco ninguna.
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
}