UITextField中secureTextEntry的潜在BUG

原创 2016年08月30日 18:48:29

背景

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 {
 // 这种代码一定要加注释,否则后面加入的同学要疯掉了...
            
版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 本文已收录于以下专栏:

相关文章推荐

iOS中UITextField设置"secureTextEntry=YES"时"clearsOnBeginEditing"无效

通常在用UITextField作为密码输入时会设置每输入一个字符就变成点用语密码输入,但是这时再次编辑就清空这个属性就会被干扰,无论把clearsOnBeginEditing设置为YES或NO,再次编...
  • p11p12
  • p11p12
  • 2015-10-13 11:06
  • 1579

iOS 6 Secure密码UITextField造成非密码UITextField退格清空Bug

今天客户报了一个应用在iOS6上的bug,比如有一个secureTextEntry为Yes的UITextField和 一个普通的UITextField,重现步骤: 1. 点击普通的UITextFiel...

使用facebook infer寻找项目潜在BUG

Facebook的infer是一个静态分析工具,如果你给定infer Objective-C,Java或C代码,它将分析潜在的bug列表。 任何人都可以使用infer拦截严重的安全漏洞,在应用上线之前...

UITextField的字体变化

  • 2016-07-14 11:19
  • 94KB
  • 下载

UItextfield属性

  • 2014-09-03 09:45
  • 11KB
  • 下载

iOS UITextField 详解

UITextField的初始化,设置位置以及大小。    UITextField *textfield=[[UITextField alloc] initWithFrame:CGRectMake(...

UITextField小结

  • 2014-09-22 11:00
  • 89KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)