1

テキストフィールドがあります。値が間違っていると、アラート値が表示され、テキストフィールドが空になる場合がありますが、次を使用すると次のようになります。

textField.text = @"";

alertViewの後、アプリがハングし、EXC_BAD_ACCESSでクラッシュします。

しかし、私が使用するときtextField.text = @"1";、それはうまくいきます、しかし私はテキストフィールドを空にしたいです。どうすればよいですか?

-(void)textFieldTextDidChangeClinicMarkup:(UITextField*)tf{

    NSString*test=clinicMarkupTextField.text;

    if([test isEqualToString:@"1"]) {
        NSString*value=@"1";

        appDelegate.clinicalMarkup=value;
    }
    else if([test isEqualToString:@"1.5"]){
        NSString*value=@"1.5";

        appDelegate.clinicalMarkup=value;
    }
    else if([test isEqualToString:@"2"]){
        NSString*value=@"2";

        appDelegate.clinicalMarkup=value;
    }
    else if([test isEqualToString:@"2.5"]){
        NSString*value=@"2.5";

        appDelegate.clinicalMarkup=value;
    }
    else if([test isEqualToString:@"3"]){
        NSString*value=@"3";

        appDelegate.clinicalMarkup=value;
    }
    else if([test length] >=3 || [test floatValue] > 3 || [test floatValue] <1 )  {
        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Clinic Markup can only be $1, $1.5, $2, $2.5 and $3 " delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];

        clinicalMArkupTextfield.text=@"";
    }

} 
4

2 に答える 2

3

この関数は、テキスト変更通知に登録しているために呼び出される可能性があります。

clinicalMArkupTextfield.text=@"";

上記の行で空白の値を割り当てると、この関数が再度呼び出されます(テキスト変更通知のため)。さて、あなたの条件のどれも満たされないので、それは再びifステートメントが続くようになります。また、無限ループに陥り、クラッシュが発生する可能性があります。

そうでなければ、何も悪いことはないようです。

于 2012-06-11T05:24:38.900 に答える
2

テキストフィールドデリゲートメソッドを使用します。

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

    if([finalString isEqualToString:@"anything"])
    {
        // Show alertBox......
    }

    return YES;
}
于 2012-06-11T05:25:56.760 に答える