0

iOS でのデリゲート メソッドの次の実装があります。

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

if (textField.tag == 2){

        if(textField.text.length > 2) {

            return NO;

        }

        return YES;

    }

    else if (textField.tag == 3) {

        if(textField.text.length > 1) {

            return NO;

        }

}

コードは、ユーザーが入力できる文字数に関して必要な制限をユーザーに加えています。ただし、テキストフィールドでは、ユーザーが入力したテキストを編集することもできません。キーストローク (削除/バックスペース キーを含む) は許可されません。テキストの長さの制限を維持するためにこれを修正する方法はありますが、ユーザーがこの値を編集できるようにする方法はありますか?

4

3 に答える 3

1

あなたのチェックはすべて間違っています。現在のテキストの長さを確認するのではなく、変更が許可された場合のテキストの長さを確認する必要があります。

これを試して:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string];

    if (textField.tag == 2) {
        return newText.length <= 2; // only allow 2 or less characters
    } else if (textField.tag == 3) {
        return newText.length <= 1; // only allow 1 or less characters
    } else {
        return YES;
    }
}
于 2013-03-29T05:28:04.463 に答える
0

userInteractionEnabledのプロパティを使用してUITextField、編集を有効または無効にしています。あなたがそれを探しているかどうかはわかりません。

    if () // Editable
    {
        textField.userInteractionEnabled = YES;
    }
    else // Non Editable
    {
        textField.userInteractionEnabled = NO;
    }
于 2015-09-09T10:53:16.570 に答える
0

以下のコードを使用

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
       NSUInteger newLength = [textField.text length] + [string length] - range.length;
       if (textField.tag == 2)
       {           
            if (newLength>2) {
            //     [textField resignFirstResponder];
                   return NO;
             }
             else {
                   return YES;
             }
        }
        else if (textField.tag == 3)
        {
            if (newLength>1) {
            //     [textField resignFirstResponder];
                   return NO;
             }
             else {
                   return YES;
             }
        }
}

これを試してみてくださいあなたは成功するでしょう

于 2013-03-29T05:28:19.297 に答える