我有一个文本字段。如果它有错误的值,那么它可能会显示警报值并使文本字段为空,但是当我使用时:
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=@"";
}
}
答案 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;
}