2012-02-02 40 views
0

我創建一個文本字段,它允許用戶輸入一個日期,我想說明要求的格式:mm-dd-yyyy。當他們鍵入時,它應該用他們輸入的數字替換格式。例如,如果他們輸入125,它應該看起來像:12-5d-yyyy如何確定刪除的位置在的UITextField

我已經能夠得到這個工作(使用textField:shouldChangeCharactersInRange:replacementString:方法)。但也有2個問題:

  1. 當我使其顯示格式加上他們有什麼類型的(通過直接設置textField.text),光標移到插入文本的最後更新的文本字段。例如,它目前看起來像:12-30-yyyy|(其中|是光標),但我希望它看起來像12-30-|yyyy那麼如何將光標放在上次輸入的位置?

  2. 我一直沒能確定其中,如果用戶按下退格或刪除發生缺失。我知道,以確定它們按退格鍵或刪除的唯一方式是這樣的:BOOL thisIsBackspace = ([string length] == 0)(其中string是replacementString:價值但這並不告訴我發生的位置所以,我怎麼能確定在一個缺失的UITextField發生。 ?

+0

對不起,我不知道如何檢測光標在哪裏,但有什麼問題可以將用戶重定向到UIDatePicker的另一個視圖,讓用戶選擇日期並使用UITextField將它們重定向回屏幕?在使用你的方法的時候,有人可能實際輸入的值超過了允許的值,例如99天爲一天或13天爲一個月。因此你需要浪費時間來解析可能的錯誤。您可以通過textfield didbeginediting方法重定向用戶 – Eugene 2012-02-02 17:28:35

回答

1

使用的UIDatePicker將來自要走的路除了...

在文本框: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; 
} 
0

您可以通過將光標:

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

您可以確定刪除通過使用「範圍」輸入方法制成

textField:shouldChangeCharactersInRange:replacementString: