在日??⒅?,有时候我们需要对textfield的输入内容进行隐藏toggle处理(特别是在登录注册模块),这时候使用苹果UITextField自带的属性secureTextEntry,就可以很方便的做到这点,但是这个属性实际的效果非常不尽人意,在改变这一属性的时候,可能会发生以下情况:
- 字体font改变
- 文字大小改变
- 隐藏内容的占位圆点大小改变
- 光标位置不准确
最佳解决方案:
BOOL wasFirstResponder;
if ((wasFirstResponder = [textField isFirstResponder])) {
[textField resignFirstResponder];
}
// 这里改变该属性最好使用以下的方法,而不要使用类似[textField setSecureTextEntry:![textField isSecureTextEntry]]的方式,因为会改变占位文字的大小
textField.secureTextEntry = !textField.secureTextEntry;
if (wasFirstResponder) {
[textField becomeFirstResponder];
}
通过代码可以看出,出现上述四点问题的关键就在于textField是否处在第一响应者上,当处在第一响应者的时候,如果通过代码改变secureTextEntry的值,就会发生问题。
遗留bug:当文本框处于secureTextEntry == Yes的状态时,第一次成为第一响应者字体(占位圆点)会变小。