0

ユーザーが入力した文字を追跡していて問題なく動作していますが、ユーザーがテキスト フィールドのメッセージ全体を削除すると、テキスト フィールドが空になり、テキスト フィールドのテキスト長 = 1 になるという問題があります。すべてを取得していません。どんな助けでも

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

    if (textField ==  textfield1)
    {


        NSLog(@"%d",textfield1.text.length);
        NSInteger charleft = (100 - textfield1.text.length);
        NSLog(@"The Characters left are %d",charleft);
        while(!(charleft<0))
        {

            NSString *Charlength= [NSString stringWithFormat:@"%d",charleft];    
            Charcount.text= [ Charlength stringByAppendingFormat:@" Characters left"];
            return YES;

        }


        return NO;

    }
4

3 に答える 3

1
int maxChars = 100;
    int charsLeft = maxChars - [textField.text length];

    if(charsLeft == 0) {
        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"No more characters"
                                                         message:[NSString stringWithFormat:@"You have reached the character limit of %d.",maxChars]
                                                        delegate:nil
                                               cancelButtonTitle:@"Ok"
                                               otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
    NSString *chrstr = [NSString stringWithFormat:@"%d characters remaining.",charsLeft];
    Charcount.text=chrstr;//
 NSLog(@"%@",chrstr;
},

editind changed オプションを使用して、uitextfield をこのアクションに接続した問題が解決しました。

于 2012-04-25T14:41:20.807 に答える
0

charleft現在のキーストロークを処理する前に計算しているため、 の値は現在のキーストロークが処理されるCharlength.textの値になります。残りの文字を表示する場合は、キーストロークが処理された後に更新する必要があります。Charlength

ここで注意すべきもう 1 つの副作用があります。バックスペースと通常の文字挿入を区別していません。しきい値の 100 文字 (私が説明したバグのため、実際には 101 文字です) を超えると、バックスペース/削除を含む別の文字を処理することはありません。つまり、ユーザーがしきい値を超えると、キャラクターを削除できなくなるため、スタックします。(それを試してみてください)。

于 2012-04-24T20:51:13.463 に答える
-1

完全な推測で、おそらく \b 文字が表示されます。

于 2012-04-24T18:36:39.727 に答える