在iPhone应用程序中的UIAlertView弹出窗口后清空文本字段值

在iPhone应用程序中的UIAlertView弹出窗口后清空文本字段值,iphone,ios,xcode,uitextfield,Iphone,Ios,Xcode,Uitextfield,我有一个文本字段。如果它有错误的值,那么它可能会显示警报值,并使文本字段为空,但当我使用: textField.text = @""; alertView之后,我的应用程序挂起并崩溃,EXC_访问错误 但是当我使用textField.text=@1;然后它工作正常,但我希望文本字段为空。我该怎么做 -(void)textFieldTextDidChangeClinicMarkup:(UITextField*)tf{ NSString*test=clinicMarkupTextFiel

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

textField.text = @"";
alertView之后,我的应用程序挂起并崩溃,EXC_访问错误

但是当我使用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=@"";
    }

} 

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

clinicalMArkupTextfield.text=@"";
当您通过上行指定空白值时,由于文本更改通知,将再次调用此函数。现在,没有一个条件是满足的,所以它将再次成为最后一个if语句。它可能陷入无限循环,并造成可能的崩溃


否则,似乎没有问题。

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

clinicalMArkupTextfield.text=@"";
当您通过上行指定空白值时,由于文本更改通知,将再次调用此函数。现在,没有一个条件是满足的,所以它将再次成为最后一个if语句。它可能陷入无限循环,并造成可能的崩溃


否则,似乎没有什么问题。

使用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;
}

使用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;
}

使用textfield委托方法。shouldChangeCharacters在创建文本字段的代码范围内,将其委托属性指定给self。textField.delegate=self;现在,添加上面的函数,并在其中使用。它不起作用,我在其他文本文件中使用相同的方法,它工作正常,正如我在上面的代码中使用textfield委托方法所做的一样。shouldChangeCharacters在创建文本字段的代码范围内,将其委托属性指定给self。textField.delegate=self;现在,添加上面的函数并在其中使用它。它不起作用,我正在对其他文本文件使用相同的方法。它与我在上面代码中所做的一样工作正常。然后您应该使用:-[textfield.text retain]。可以在何处使用此重新存储请告诉我InicalMarkupTextField.text=@;[clinicalMArkupTextfield.text];那么你应该使用:-[textfield.text retain]。在哪里可以使用这个reatain?请告诉我linicalmarkuptextfield.text=@;[clinicalMArkupTextfield.text];当用户确认数据时,为什么不验证数据。我的意思是当调用textFieldDidEndEditing时?如何确认?请告诉我,当用户确认数据时,为什么不验证数据。我的意思是当调用textFieldDidEndEditing时?如何确认,请告诉我