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
  • 1757

[iOS]解决setSecureTextEntry切换之后有留白的问题

我有一个密码隐藏显示的功能,经常切换之后后边有留白,但是其实根本什么都没有,只是由于字体的不同导致光标没有转换过去。 最后解决了这个问题。 从暗文到明文转换的时候把字符串保存到一个临时的字符串上,然后...

Xcode9学习笔记27 - 文本输入框控件的使用UITextField

//添加文本框代理协议UITextFieldDelegate,使用协议中的方法,在完成文本框文字的输入后,隐藏系统键盘的显示 class ViewController: UIViewControlle...

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

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

UITextField动态获取汉字个数

  • 2014年07月17日 22:13
  • 30KB
  • 下载

UITextField+Extension实现上移效果

  • 2016年09月29日 09:27
  • 163KB
  • 下载

使用facebook infer寻找项目潜在BUG

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

[iOS] UITextField如何准确限制中文输入文本长度

UITextField在iOS界面开发中是一个非常常见的控件,而对输入框做适当的长度限制也是iOS App开发中一个相当常见的需求。非常不幸,UITextField却没有提供一个简洁的方法来达到这一要...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UITextField中secureTextEntry的潜在BUG
举报原因:
原因补充:

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