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=@"";

当您通过上述行分配空白值时,将再次调用此函数(由于文本更改通知)。现在,您的条件都不满足,因此它将再次出现在 else 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 回答