0

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

我已经能够得到这个工作(使用textField:shouldChangeCharactersInRange:replacementString:方法)。但是有2个问题:

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

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

4

2 回答 2

1

使用 UIDatePicker 将是要走的路。除此之外...

在 textField:shouldChangeCharactersInRange: 中,范围参数将告诉您实际更改发生在字段中的哪个位置。

您还可以使用 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;
}
于 2012-02-02T19:33:29.403 回答
0

您可以使用以下方法放置光标:

[textField setSelectedRange:NSMakeRange(desiredPosition, 0)];

您可以使用方法的“范围”输入来确定删除的位置

textField:shouldChangeCharactersInRange:replacementString:
于 2012-02-02T21:28:45.633 回答