我创建了一个简单的项目:https://github.com/edzio27/textFieldExample.git
在该项目中,我添加了两个UITextField
,一个用于登录,另一个用于输入安全密码。我注意到有一些奇怪的行为:
- 点击登录并添加一些文本,
- 点击密码并添加一些文本,
- 再次点击登录
UITextField
请注意,在iOS7中,密码字体大小出现了奇怪的问题。
问题可能是什么?
谢谢。
我创建了一个简单的项目:https://github.com/edzio27/textFieldExample.git
在该项目中,我添加了两个UITextField
,一个用于登录,另一个用于输入安全密码。我注意到有一些奇怪的行为:
UITextField
请注意,在iOS7中,密码字体大小出现了奇怪的问题。
问题可能是什么?
谢谢。
[self.passwordTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
- (void)textFieldDidChange:(id)sender
{
UITextField *textField = (UITextField *)sender;
if (textField == self.passwordTextField) {
// Set to custom font if the textfield is cleared, else set it to system font
// This is a workaround because secure text fields don't play well with custom fonts
if (textField.text.length == 0) {
textField.font = [UIFont fontWithName:@"OpenSans" size:textField.font.pointSize];
}
else {
textField.font = [UIFont systemFontOfSize:textField.font.pointSize];
}
}
}
使用自定义字体切换安全/非安全状态:为了显示“安全”文本(blob字符),iOS设置了一种包含blob字符的字体。当您切换到不安全模式时,这就是您稍后看到呈现文本的字体。
虽然文本字段保留了您分配的自定义字体,但该字段的内容是一个带属性的字符串,引用包含blob的字体。
简单的解决方案:将正确的、自定义的字体写入属性字符串字段即可重新应用。
要关闭安全输入并保留自定义字体:
passwordTextField.secureTextEntry = false
// We have to remove iOS' secure font by setting attributedText.
let pwd = passwordTextField.text!
passwordTextField.attributedText = NSAttributedString(string: pwd)
设置您的TextField的代理并添加以下内容:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (!textField.secureTextEntry) {
return YES;
}
textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (textField.text.length > 0) {
textField.font = [UIFont systemFontOfSize:18.0f];
} else {
textField.font = [UIFont fontWithName:@"YourFont" size:18.0f];
}
return NO;
}
请查看: 如何使用自定义字体在UITextField中显示密码圆点?
glyuck提供了一种优雅的解决方案,我很喜欢。 http://github.com/elegion/ELFixSecureTextFieldFont 他在UITextField上创建了一个类别。为了显示漂亮的圆点,您需要包含ELFixSecureTextFieldFont.h和.m文件,然后像这样在您的textField上调用- (void)fixSecureTextFieldFont:
[yourCustomSecureTextField fixSecureTextFieldFont];
就是这样。