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)ものreplacementString:です :

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 に答える