我正在创建一个允许用户输入日期的文本字段,我想显示所需的格式:mm-dd-yyyy
。在键入时,它应该用他们键入的数字替换格式。例如,如果他们输入125
,则应该如下所示:12-5d-yyyy
。
我已经能够实现这一点(使用textField:shouldChangeCharactersInRange:replacementString:
方法)。但是有两个问题:
当我更新文本字段以便显示格式加上他们键入的内容时(通过直接设置textField.text
),光标将转到插入文本的末尾。例如,它目前看起来像:12-30-yyyy|
(其中|
是光标),但我希望它看起来像12-30-|yyyy
。 那么如何将光标放在最后输入的位置?
如果用户按退格键或删除,我无法确定删除的位置。我知道确定他们按下退格键或删除的唯一方法是这样的:BOOL thisIsBackspace = ([string length] == 0)
(其中string是replacementString:
的值。但这并不能告诉我它在哪里发生。所以如何确定UITextField中删除的位置?
答案 0 :(得分:1)
使用UIDatePicker将是最佳选择。除此之外......
在textField中:shouldChangeCharactersInRange:range参数将告诉您实际更改在字段中的位置。
您还可以使用stringByReplacingCharactersInRange在编辑后创建字段的值。然后你可以用它来比较和找到他们编辑的地方。
- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string];
// Now you can compare text and textField.text and find where they are different.
return YES;
}
答案 1 :(得分:0)
您可以使用以下方式放置光标:
[textField setSelectedRange:NSMakeRange(desiredPosition, 0)];
您可以使用"范围"来确定删除的位置。方法的输入
textField:shouldChangeCharactersInRange:replacementString: