es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo alternar la entrada segura de texto y NO borrar el texto en Objective-C?

Estoy tratando de crear un interruptor para mostrar/ocultar contraseñas en Objective-C, pero estoy teniendo un problema con la entrada de texto segura.
He visto algunas respuestas a esta pregunta (aquí y aquí), pero no puedo resolver el problema.

Entonces, tengo un botón que interactúa con el campo de texto y alterna la entrada de texto segura.

- (IBAction)showHidePassword:(id)sender {
    UIButton *btn = sender;
    if (self.passTextField.secureTextEntry == YES) {
        self.passTextField.secureTextEntry = NO;
        [self.toggleBTN setImage:[UIImage systemImageNamed:@"eye.fill"] forState:UIControlStateNormal];
    } else {
        self.passTextField.secureTextEntry = YES;
        [self.toggleBTN setImage:[UIImage systemImageNamed:@"eye"] forState:UIControlStateNormal];
    }
}

El problema es que cuando el usuario cambia de mostrar a ocultar nuevamente, el texto desaparece y hay que comenzar de nuevo. Esto parece ser el comportamiento predeterminado en iOS.

No sé si hay alguna forma de solucionar esto utilizando acciones de botón en lugar de funciones, o tal vez podría ocultar el texto con otra propiedad en lugar de la entrada de texto segura.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para Mostrar/Ocultar campo de contraseña en Objective-C

    Como experto en tecnología de la información especializado en iOS, Objective-C y textField, a continuación se presenta una posible solución al problema de la desaparición del texto al alternar entre la entrada de texto segura y la entrada de texto normal:

    1. Utilice una clase customizada de textField que anule la propiedad secureTextEntry.
    @interface CustomTextField : UITextField
    @end
    
    @implementation CustomTextField
    
    - (void)setSecureTextEntry:(BOOL)secureTextEntry {
        [super setSecureTextEntry:secureTextEntry];
        [self refreshText];
    }
    
    - (void)setText:(NSString *)text {
        [super setText:text];
        [self refreshText];
    }
    
    - (void)refreshText {
        if (!self.secureTextEntry) {
            // Esto evitará que el texto desaparezca al alternar a la entrada de texto normal
            self.attributedText = [[NSAttributedString alloc] initWithString:self.text attributes:@{NSFontAttributeName: self.font}];
        }
    }
    
    @end
    
    1. Utilice el textField personalizado en su código.
    @property (weak, nonatomic) IBOutlet CustomTextField *passwordTextField;
    
    - (IBAction)showHidePassword:(id)sender {
        UIButton *btn = sender;
        self.passwordTextField.secureTextEntry = !self.passwordTextField.secureTextEntry;
        if (self.passwordTextField.secureTextEntry) {
            [self.toggleBTN setImage:[UIImage systemImageNamed:@"eye"] forState:UIControlStateNormal];
        } else {
            [self.toggleBTN setImage:[UIImage systemImageNamed:@"eye.fill"] forState:UIControlStateNormal];
        }
    }
    

    Esto evitará que el texto desaparezca al alternar entre la entrada de texto segura y la entrada de texto normal en Objective-C.

Comments are closed.