13

アプリケーションにUITextFieldがあります。フィールドに入力できる文字のセットを、定義したセットに制限したいと思います。UITextFieldDelegateメソッドを使用して、テキストがコミットされるときにフィールドに入力された文字をフィルタリングできます。

- (BOOL)textFieldShouldReturn:(UITextField*)textField

ただし、これはユーザーに誤った印象を与えます。制限された文字は最終値から削除されますが、Return/Doneなどを押す前にテキストフィールドに表示されたままであるためです。制限された文字がキーボードで選択されたときにテキストフィールドに表示されないようにするための最良のアプローチは何ですか?

注:私は、iPhoneキーボードによって提供されるキーをほとんど制御できないという前提で操作しています。さまざまなキーボードの実装を切り替えることができることは承知していますが、特定のキーを無効にできないという印象を受けています。この仮定は正しくない可能性があります。

4

7 に答える 7

25

marccが提案したとおりに実行したところ、うまくいきました。サンプルの実装は次のとおりです。

注:変数名は簡潔にするために選択されており、私のコーディング基準を反映していません。

    ...
    myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"xyzXYZ"];
    ...
}

- (BOOL) textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)textEntered {
    for (int i = 0; i < [textEntered length]; i++) {
        unichar c = [textEntered characterAtIndex:i];
        if (![myCharSet characterIsMember:c]) {
            return NO;
        }
    }
    return YES;
}
于 2009-06-18T21:25:06.373 に答える
15

見るtextField:shouldChangeCharactersInRange

このメソッドは、UITextFieldDelegate新しい文字が入力されるか、テキスト フィールドから既存の文字が削除されるたびに、 によって呼び出されます。変更を許可しない場合は、NO を返すことができます。

于 2009-06-18T16:50:09.550 に答える
2

UITextViewDelegateメソッドを見てください- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

それはまさにあなたが必要とするものです。

于 2009-06-18T16:51:13.963 に答える
2

これは、ユーザーを大文字の AZ に制限するために使用するものです。好みに応じて正規表現変数を調整します。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSString* regex = @"[^A-Z]";
    return ([string rangeOfString: regex
                      options:NSRegularExpressionSearch].location == NSNotFound);
};
于 2014-09-23T16:03:45.073 に答える
-6

DidBeginEditing メソッドが呼び出されたら、ループして UITextField.text プロパティが変更されたかどうかを確認し続けることができます。含まれている場合は、テキストを確認し、不適切な文字を削除します。

于 2009-06-18T16:51:18.583 に答える