背景
UITextField用的也够多了,这两天改一个“修改密码”的bug,结果发现一旦设置了secureTextEntry之后,会有很多的坑,
这里简单总结下:
第一天更新:
// 说明:以下所有的问题点都是New Password这个UITextField
1. keyboard type会改变
背景:
设置当前New Password的keyboardtype是UIKeyboardTypeASCIICapable,
现象:
设置textfield为暗文的时候,正常;但是设置为明文的时候,键盘会变化,看如下截图(注意观察左下角):
这个原因也没查清楚,应该secureTextEntry切换的时候的bug.
那怎么解决呢?
简单来说,既然是明文状态下会出错,那么就在点击其他textfield的时候,将该password textfield设置为暗文即可.
即:可以监听textfield的textfield end edit 状态,并检查不是FirstResponder的时候,设置secureTextEntry为YES
解决代码如下:
- (void)textFieldChanged {
if (![self.textField isFirstResponder]) {
self.textField.secureTextEntry = YES;
}
}
2. 光标不稳定
现象:
当secureTextEntry在YES和NO之间切换的时候,理论上光标应该在最后一个字符后面,但是实际会出现当有暗文变为明文的时候,光标还停留在原来的位置的情况.如下截图,蓝色光标和内容之间的空格:
那怎么解决呢?
这个的解决方法,想的比较容易,让光标重新刷新一下就好.
光标什么时候回刷新呢?
当输入的text改变的时候会刷新,于是考虑当设置secureTextEntry后, 将textfield重新赋值一次,即额外手动触发器一次text改变:
解决代码如下:
- (void)showPasswordAction {
// fix cursor bug: reset text to refresh cursor
NSString *tempStr = self.textField.text;
self.textField.text = nil;
self.textField.text = tempStr;
[self setTextFiledSecureTextEntry:!self.textField.secureTextEntry];
}
3. text内容显示不全
现象:
光标移到其他textfield上,然后点击show的button,这时候就会出现部分字母显示不全的情况:
可当光标移到这个textfiled上的时候,就会恢复正常
那怎么解决呢?
如果要解决的话,比较简单的方式就是当点击show (就是这个"眼睛")这个button的时候,将光标移到当前textfield上.
解决代码如下:
- (void)showPasswordAction {
// 这种代码一定要加注释,否则后面加入的同学要疯掉了...