【发布时间】:2012-06-24 20:19:02
【问题描述】:
谁能帮我解决这个问题:我需要为输入号码实现UITextField。此数字应始终为十进制格式,有 4 位,例如12.3456 或 12.3400。
所以我创建了NSNumberFormatter,它可以帮助我处理小数位。
我正在设置UITextField 的值
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
方法。
我处理输入,使用格式化程序,最后调用[textField setText: myFormattedValue];
这工作正常,但此调用还将光标移动到我的字段末尾。这是不想要的。例如。我的字段中有 12.3400,光标位于开头,用户键入数字 1。结果值为 112.3400,但光标在末尾移动。我想在用户期望时以光标结束(就在最近添加的数字 1 之后)。有一些关于在TextView 中设置光标的主题,但这是UITextField。我还尝试捕获该字段的selectedTextRange,它正确保存了光标位置,但在setText 方法调用之后,它会自动更改并且原点UITextRange 丢失(更改为当前)。希望我的解释很清楚。
请帮帮我。非常感谢您。
编辑:最后,我决定在整个编辑后切换功能以更改格式,并且效果很好。我已经通过添加一个选择器forControlEvents:UIControlEventEditingDidEnd 来做到这一点。
【问题讨论】:
-
当你读到
selectedTextRange时,你能不能不把它复制为类中的一个属性,作为UITextFieldDelegate,然后在setText:之后重新设置它? -
菲利普,这行不通。使用 setText 设置文本后,设置文本之前收集的 UITextRange 将重置为 null,因此您无法将其重新应用到完成的 UITextField。
标签: ios uitextfield nsnumberformatter selectedtext