¿Cómo deshabilitar / habilitar la clave de retorno en un UITextField?

¿Hay alguna manera de habilitar o deshabilitar mediante progtwigción la tecla Retorno en el UIKeyboard ? Lo más cercano que pude encontrar es enablesReturnKeyAutomatically , pero eso solo dirá si desactivarlo en absoluto.

Si puede obtener el objeto UIKeyboard mismo (algo que no está expuesto en el SDK, tenga en cuenta que Apple no estará contento si usa estas llamadas), entonces hay una conveniente función setReturnKeyEnabled: member.

 id keyboard = [self magicallyGetAUIKeyboardInstance]; [keyboard setReturnKeyEnabled: NO]; 

(a través del volcado de Erica Sadun de los 2.2 frameworks de iPhone)

La implementación de magicallyGetAUIKeyboardInstance se describe aquí .

Puede estar siguiendo el segmento de código ayuda.

 textfield.enablesReturnKeyAutomatically = YES; 

Esto está disponible públicamente en iPhone SDK en UITextInputTraits. Al usar esto, la tecla de retorno se desactivará cuando no haya texto de entrada disponible dentro del campo de texto

La propiedad UITextField de UITextField se puede establecer directamente en Interface Builder, solo seleccione el campo de texto y abra el inspector de atributos. Como declaró Tharindu, esto habilitará y deshabilitará automáticamente la tecla de retorno dependiendo de si se ha ingresado algún texto.

enter image description here

Por supuesto, si necesita cambiar esto en el código, puede configurarlo programáticamente usando nameTextField.enablesReturnKeyAutomatically = true .

EDITAR para dirigirse a los votos abajo:

De lo contrario, no hay una forma oficial de habilitar y deshabilitar la tecla de retorno en el comando. Recomendaría no intentar usar API privadas para lograr esto. Alternativamente, puede usar el método textFieldShouldReturn: delegate y poner allí su condicional / validación y responder en consecuencia.

Puede anular el atributo hasText para lograr esto:

 class CustomTextField : UITextField { override public var hasText: Bool { get { return evaluateString(text) } } } 

Where evaluateString(_ text: String?) -> Bool comprueba sus criterios de entrada necesarios, por ejemplo, el recuento de caracteres.

Por supuesto, esto solo funciona en combinación con enablesReturnKeyAutomatically = true set en UITextField .

Soy consciente de que mi respuesta no es ni oportuna ni escrita en Objective-C, pero dado que no he podido encontrar una respuesta en otro lugar y esta pregunta se menciona de forma rutinaria en otros hilos, creo que este es el mejor lugar para publícalo.

Una buena idea es crear un archivo para acceder a esta clase desde cualquier lugar. Aquí está el código:

UIKeyboard.h

 #import  @interface UIApplication (KeyboardView) - (UIView *)keyboardView; @end 

UIKeyboard.m

 #import "UIKeyboard.h" @implementation UIApplication (KeyboardView) - (UIView *)keyboardView { NSArray *windows = [self windows]; for (UIWindow *window in [windows reverseObjectEnumerator]) { for (UIView *view in [window subviews]) { if (!strcmp(object_getClassName(view), "UIKeyboard")) { return view; } } } return nil; } @end 

Ahora puede importar y acceder a esta clase desde su propia clase:

 #import "UIKeyboard.h" // Keyboard Instance Pointer. UIView *keyboardView = [[UIApplication sharedApplication] keyboardView]; 

Una documentación completa de esta clase que puede encontrar aquí: http://ericasadun.com/iPhoneDocs/_u_i_keyboard_8h-source.html

Puede encontrar más información aquí: http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html

Esta es una técnica que está disponible desde la API documentada, pero no proporciona comentarios visuales cuando la tecla Intro está desactivada.

 - (void)setup { // Or in init self.textField.delegate = self; } //  - (BOOL)textFieldShouldReturn:(UITextField *)textField { // substitute your test here return [textField.text rangeOfString:@"@"].location != NSNotFound; } 

Otras respuestas aquí se pueden usar con

 [textField addTarget:self action:@selector(validateTextField:) forControlEvents:UIControlEventEditingChanged]; 

para proporcionar información visual dinámica a medida que el usuario escribe.