ios - tipos - ¿Cómo deshabilitar/habilitar la clave de retorno en un UITextField?
dta ley aduanera (6)
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;
}
// <UITextFieldDelegate>
- (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.
¿Hay alguna manera de habilitar o deshabilitar mediante programación la tecla Retorno en el UIKeyboard
? Lo más cercano que pude encontrar es enablesReturnKeyAutomatically
, pero eso solo dirá si desactivarlo en absoluto.
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.
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.
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
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 here .
Una buena idea es crear un archivo para acceder a esta clase desde cualquier lugar. Aquí está el código:
UIKeyboard.h
#import <UIKit/UIKit.h>
@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