UITextField中secureTextEntry的潜在BUG

背景

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值