11

是否有一种聪明的方法可以让用户在 ios/iphone UITextField 中在隐藏和查看密码之间切换,用户可以在其中输入密码并可以选择隐藏或查看密码。提前致谢。

4

5 回答 5

25

简单设置

.secureTextEntry = YES

如果 textField 有焦点,我认为由于错误(或功能)而无法工作。

如果 textField 当前是 firstResponder,也可以使用类似的方法使其工作

-(void) toggleTextFieldSecureEntry: (UITextField*) textField {
    BOOL isFirstResponder = textField.isFirstResponder; //store whether textfield is firstResponder

    if (isFirstResponder) [textField resignFirstResponder]; //resign first responder if needed, so that setting the attribute to YES works
    textField.secureTextEntry = !textField.secureTextEntry; //change the secureText attribute to opposite
    if (isFirstResponder) [self.textField becomeFirstResponder]; //give the field focus again, if it was first responder initially
}
于 2012-12-17T19:00:52.463 回答
7
- (IBAction)ShowPass:(UIButton *)sender {
    if (self.password.secureTextEntry == YES) {
        [self.showPass setTitle:@"HIDE" forState:(UIControlStateNormal)];
        self.password.secureTextEntry = NO;   
    }else{
        [self.showPass setTitle:@"SHOW" forState:(UIControlStateNormal)];
        self.password.secureTextEntry = YES;
    }
}
于 2015-08-27T07:52:51.310 回答
3

马里奥的回答很好,对我帮助很大。

但是,如果您在文本字段中使用自定义字体,一旦您从安全输入更改为纯文本,文本字段的文本将使用错误(非自定义)字体绘制,直到用户输入另一个字符。

通过一些小技巧,我能够通过模拟代码中的字符输入来解决这个问题。

这个修改过的马里奥的代码应该适用于具有自定义字体的字段:

- (void)toggleTextFieldSecureEntry:(UITextField *)textField {
    BOOL isFirstResponder = textField.isFirstResponder;

    if (isFirstResponder) {
        [textField resignFirstResponder];
    }

    textField.secureTextEntry = !textField.secureTextEntry;

    if (isFirstResponder) {
        [textField becomeFirstResponder];
    }

    // When using custom font and changing from secure entry to plain text, the text is initially drawn with wrong font
    // until a next character is input by user. This hack fixes the font immediatelly (simulate add and delete character)
    if (!textField.isSecureTextEntry) {
        [textField insertText:@"x"];
        [textField deleteBackward];
    }
}
于 2015-10-15T07:36:04.183 回答
2

您可以使用secureTextEntry. UITextField当你想隐藏(显示每个字符的点)时,你可以使用yourTextField.secureTextEntry=YES; 当你想显示密码时使用yourTextField.secureTextEntry=NO;

于 2012-12-17T18:47:32.927 回答
1

对于 Swift,只有赋值值从 YES/NO 变为 true/false 布尔值。

password.secureTextEntry = true //Visible
password.secureTextEntry = false //InVisible
于 2015-08-25T02:51:51.807 回答