UITextField展示格式化(电话号码 银行卡格式化出现的问
开发中对卡号,号码展示需求如下:
- 如原始电话号码: 12345678901
- 格式化号码: 123 4567 8901
一般情况下,在做完格式化操作后会对 光标 位置进行调整
正常操作:
错误情况:
- 123 4567 8
- 将光标移动到6后面
- 粘贴01
- 期待结果: 123 4560 178 光标在1 和 78 之间
- iOS11系统 (系统拨号页面 ,大众点评添加银行卡)光标会出现在7 和 8之间,也就是向后移了一位,在(我公司的app里)会出现在空格 和 1之间, 光标向前移了一位
跟踪此问题发现:
- 业务代码上对光标的位置处理是正确的。但当所有的处理结束后selectedTextRange值会被系统内部调用,直接修改导致了错误(由于不知道是人为点击修改的还是系统内部代码修改的,所以暂时无法对这次错误的调用进行屏蔽)
- 如果可以输入中文的话,selectedTextRange的修改更离谱
找到一个解决方案
DispatchQueue.main.async {
targetPostion // 是Int值,表示index
self.selectedTextRange = self.textRange(from: targetPostion, to: targetPostion)
}
- 系统修改光标是在当前循环,也就是我的光标设置结束。现在我将正确的光标设置放在下一个循环就可以正确调整光标了(公司还没有开源项目,所以代码无法直接贴上来)
本文标题:UITextField展示格式化(电话号码 银行卡格式化出现的问
本文链接:https://www.haomeiwen.com/subject/qxxoyxtx.html
网友评论