如何确定UITextField中删除的位置

时间:2012-02-02 17:18:20

标签: iphone objective-c ios uitextfield uitextfielddelegate

我正在创建一个允许用户输入日期的文本字段,我想显示所需的格式:mm-dd-yyyy。在键入时,它应该用他们键入的数字替换格式。例如,如果他们输入125,则应该如下所示:12-5d-yyyy

我已经能够实现这一点(使用textField:shouldChangeCharactersInRange:replacementString:方法)。但是有两个问题:

  1. 当我更新文本字段以便显示格式加上他们键入的内容时(通过直接设置textField.text),光标将转到插入文本的末尾。例如,它目前看起来像:12-30-yyyy|(其中|是光标),但我希望它看起来像12-30-|yyyy那么如何将光标放在最后输入的位置?

  2. 如果用户按退格键或删除,我无法确定删除的位置。我知道确定他们按下退格键或删除的唯一方法是这样的:BOOL thisIsBackspace = ([string length] == 0)(其中string是replacementString:的值。但这并不能告诉我它在哪里发生。所以如何确定UITextField中删除的位置?

2 个答案:

答案 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: