关闭

UITextField中secureTextEntry的潜在BUG

标签: keyboard type改变textfiled光标密码不显示省略号placeholder 字体问题secureTextEntry 字体
870人阅读 评论(0) 收藏 举报
分类:

背景

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,这时候就会出现部分字母显示不全的情况:


屏幕快照 2016-05-12 上午12.46.01.png

可当光标移到这个textfiled上的时候,就会恢复正常

那怎么解决呢?

如果要解决的话,比较简单的方式就是当点击show (就是这个"眼睛")这个button的时候,将光标移到当前textfield上.

解决代码如下:
- (void)showPasswordAction {
 // 这种代码一定要加注释,否则后面加入的同学要疯掉了...   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:474700次
    • 积分:6149
    • 等级:
    • 排名:第4042名
    • 原创:156篇
    • 转载:131篇
    • 译文:47篇
    • 评论:38条
    最新评论