【发布时间】:2013-06-04 19:21:15
【问题描述】:
我有一个 UITextField,它是使用
声明的密码字段passwordField.secureTextEntry = YES;
我的问题是,当我输入一半密码时,单击另一个组件,然后返回密码字段并再次开始输入,iOS 会清除现有文本。
有没有办法防止这种情况发生或将其关闭?
-亨利
【问题讨论】:
标签: ios passwords uitextfield
我有一个 UITextField,它是使用
声明的密码字段passwordField.secureTextEntry = YES;
我的问题是,当我输入一半密码时,单击另一个组件,然后返回密码字段并再次开始输入,iOS 会清除现有文本。
有没有办法防止这种情况发生或将其关闭?
-亨利
【问题讨论】:
标签: ios passwords uitextfield
执行此操作的最简单方法是使用类似于此的代码为 UITextField 实现委托:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)replacementString {
if (textField.text) {
textField.text = [textField.text stringByReplacingCharactersInRange:range withString:replacementString];
} else {
textField.text = replacementString;
}
return NO;
}
【讨论】:
默认情况下,不,您不能对安全文本字段执行此操作。不过你可以解决它。
实现委托方法textField:shouldChangeCharactersInRange:replacementString: 并使用传递的值来决定做什么。
即如果范围是整个字符串并且替换是空字符串,则不允许更改。新文本可能作为新键入的字符提供,您需要检查该方法实际接收的参数。
【讨论】:
当我更改键盘类型以使我的密码组合为 4(digits)+1(alpha) 以停止清除 secureTextEntry 时,我遇到了同样的情况,
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
textField.keyboardType = UIKeyboardTypePhonePad;
[textField reloadInputViews];
return YES;
}
它会重新加载UITextField,但不会重新加载其文本,因此在不清除文本的情况下,它会将键盘从字母更改为数字,反之亦然。您可以将其用于您自己的功能。
【讨论】: