在iPhone应用程序中的UIAlertView popUp之后清空文本字段值

时间:2012-06-11 05:16:28

标签: iphone ios xcode uitextfield

我有一个文本字段。如果它有错误的值,那么它可能会显示警报值并使文本字段为空,但是当我使用时:

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

} 

2 个答案:

答案 0 :(得分:3)

可能会调用此函数,因为您已将其注册为文本更改通知。

clinicalMArkupTextfield.text=@"";

当您通过上面的行指定空白值时,将再次调用此函数(由于文本更改通知)。现在,你的条件都没有得到满足,所以如果声明,它将再次出现。它可能会陷入无限循环并造成可能的崩溃。

否则,似乎没有错。

答案 1 :(得分:2)

使用textfield委托方法:

- (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;
}