美文网首页
UITextField展示格式化(电话号码 银行卡格式化出现的问

UITextField展示格式化(电话号码 银行卡格式化出现的问

作者: craig_wang | 来源:发表于2017-10-12 15:10 被阅读32次

开发中对卡号,号码展示需求如下:

  • 如原始电话号码: 12345678901
  • 格式化号码: 123 4567 8901

一般情况下,在做完格式化操作后会对 光标 位置进行调整

正常操作:

  • 1
  • 在1后面粘贴23
  • 123 光标在3后面正常

错误情况:

  • 123 4567 8
  • 将光标移动到6后面
  • 粘贴01
  • 期待结果: 123 4560 178 光标在1 和 78 之间
  • iOS11系统 (系统拨号页面 ,大众点评添加银行卡)光标会出现在7 和 8之间,也就是向后移了一位,在(我公司的app里)会出现在空格 和 1之间, 光标向前移了一位

跟踪此问题发现:

  • 业务代码上对光标的位置处理是正确的。但当所有的处理结束后selectedTextRange值会被系统内部调用,直接修改导致了错误(由于不知道是人为点击修改的还是系统内部代码修改的,所以暂时无法对这次错误的调用进行屏蔽)
  • 如果可以输入中文的话,selectedTextRange的修改更离谱

找到一个解决方案

  • swift代码如下
DispatchQueue.main.async {
          targetPostion // 是Int值,表示index
          self.selectedTextRange = self.textRange(from: targetPostion, to: targetPostion)
 }
  • 系统修改光标是在当前循环,也就是我的光标设置结束。现在我将正确的光标设置放在下一个循环就可以正确调整光标了(公司还没有开源项目,所以代码无法直接贴上来)

相关文章

网友评论

      本文标题:UITextField展示格式化(电话号码 银行卡格式化出现的问

      本文链接:https://www.haomeiwen.com/subject/qxxoyxtx.html