2012-02-02 11 views
0

ユーザーが日付を入力できるテキストフィールドを作成していて、必要な形式:mm-dd-yyyyを表示したいとします。彼らがタイプするとき、それは彼らがタイプする数字でフォーマットを置き換えるべきです。たとえば、125と入力した場合は、12-5d-yyyyのようになります。UITextFieldで削除の場所を特定するには

私はこれを(textField:shouldChangeCharactersInRange:replacementString:メソッドを使用して)動作させることができました。それは形式プラス彼らが(直接textField.textを設定することで)入力したが表示されるように、私は、テキストフィールドを更新

  1. カーソルが挿入されたテキストの最後に行く:しかし、2つの問題点があります。たとえば、現在は12-30-yyyy|(ここでは|がカーソルです)のように表示されますが、12-30-|yyyyのようになります。 最後に入力したところにカーソルを置くにはどうすればよいですか?

  2. ユーザーがバックスペースまたは削除を押したときにどこで削除が行われるかを特定できませんでした。バックスペースまたは削除を押したと判断する方法は、BOOL thisIsBackspace = ([string length] == 0)(文字列はreplacementString:の値ですが、これはどこで発生したのかわかりません)UITextFieldでどこで削除が行われるかはどのように判断できますか?UIDatePickerを使用して

+0

方法の入力を「範囲」を用いて作られたかを決定することができますカーソルがどこにあるかを検出する方法はわかりませんが、UIDatePickerを使って別のビューにユーザーをリダイレクトして、ユーザーが日付を選択してUITextFieldで画面にリダイレクトする問題がありますか?あなたの方法を使用している間、誰かが実際には許可されている以上の値を入力することができます。たとえば、99は1日、13は月です。したがって、考えられるエラーを解析する時間を無駄にする必要があります。あなたはテキストフィールドの作成方法でユーザーをリダイレクトできます – Eugene

答えて

1

それはさておき行くための方法だろう...

テキストフィールドで:。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: 
関連する問題