我有UITextField
我用作密码字段。默认情况下,secureTextEntry
设置为true
。
我还有一个UIButton
来切换密码的显示/隐藏。
当我将文本字段从secureTextEntry
设置为true
更改为false
时,字体会变得奇怪。似乎它成为Times New Roman或类似的。
我尝试将字体重新设置为大小为14的系统,但它没有改变任何东西。
发生的事情示例(初始secureTextEntry
设置为true
):
我的代码:
@IBAction func showHidePwd(sender: AnyObject) {
textfieldPassword.secureTextEntry = !textfieldPassword.secureTextEntry
// Workaround for dot+whitespace problem
if !textfieldPassword.secureTextEntry {
let tempString = textfieldPassword.text
textfieldPassword.text = nil
textfieldPassword.text = tempString
}
textfieldPassword.font = UIFont.systemFontOfSize(14)
if textfieldPassword.secureTextEntry {
showHideButton.setImage(UIImage(named: "EyeClosed"), forState: .Normal)
} else {
showHideButton.setImage(UIImage(named: "EyeOpen"), forState: .Normal)
}
textfieldPassword.becomeFirstResponder()
}
答案 0 :(得分:33)
在首次将字体设置为nil之前,更改UITextField的字体不会生效。试试以下。
textfieldPassword.font = nil
textfieldPassword.font = UIFont.systemFontOfSize(14.0)
答案 1 :(得分:14)
之前我遇到过这个错误。不知道为什么会这样。我发现如果您关闭键盘然后切换secureTextEntry,您将不会丢失字体样式。
textField.resignFirstResponder()
textField.secureTextEntry = !self.textField.secureTextEntry
textField.becomeFirstResponder()
答案 2 :(得分:5)
事实上,为了解决这个问题,我使用了前两个回复的混合。
在我的特定情况下,我的视图只包含两个字段。所以我:
使用这种方法,我没有显示/隐藏键盘的问题,它工作得很好。
的问候。 塞巴斯蒂安。
BOOL loginTextFieldHadFocus = self.loginTextField.isFirstResponder;
BOOL passwordTextFieldHadFocus = self.passwordTextField.isFirstResponder;
if (self.passwordTextField.isSecureTextEntry)
{
self.passwordTextField.secureTextEntry = NO;
self.passwordTextField.font = nil;
self.passwordTextField.font = [UIFont systemFontOfSize:19.0 weight:UIFontWeightRegular];
[self.passwordTextField resignFirstResponder];
}
else
{
self.passwordTextField.secureTextEntry = YES;
[self.passwordTextField resignFirstResponder];
}
if (loginTextFieldHadFocus)
{
[self.loginTextField becomeFirstResponder];
}
else if (passwordTextFieldHadFocus)
{
[self.passwordTextField becomeFirstResponder];
}
答案 3 :(得分:2)
对于swift,将bool属性设置为Show并隐藏密码,然后在view did load方法中指定false,然后在单击密码Show / Hide按钮时执行以下代码:
@IBAction func showHidePassword(sender: UIButton) {
showPassword = !showPassword
passwordTxtField.becomeFirstResponder()
if (showPassword == true) {
passwordTxtField.secureTextEntry = false
let password = passwordTxtField.text!
passwordTxtField.attributedText = NSAttributedString(string: password)
}else{
passwordTxtField.secureTextEntry = true
}
sender.setTitle(showPassword == true ? "Hide" : "Show", forState: .Normal)
}
答案 4 :(得分:0)
passwordTextField.secureTextEntry = false
let text = passwordTextField.text!
passwordTextField.attributedText = NSAttributedString(string: text)
这对我有用。我们只是使用属性字符串分配字体。然而,似乎有一个小故障。
答案 5 :(得分:0)
可以通过这种方式修复这些错误:
[self resignFirstResponder];
NSString *text = self.text;
self.text = @" ";
self.text = text;
//here add some logic
[self becomeFirstResponder];
答案 6 :(得分:0)
在切换安全文本输入时,将字体设置为nil并恢复正常帮助我:
@objc func toggleSecureTextEntry(_ sender: UIButton) {
isSecureTextEntry = !isSecureTextEntry
updateShowButtonVisual()
if !isSecureTextEntry {
let oldFont = font
font = nil
font = oldFont
}
}