我想保持一个按钮禁用,直到我用数字填充三个文本字段。 在三个文本字段中输入值后,将启用该按钮。
我做了以下事情:
-(BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *Width = [theTextField.text stringByReplacingCharactersInRange:range withString:[NSString stringWithFormat:@"%@",self.Width]];
NSString *Height = [theTextField.text stringByReplacingCharactersInRange:range withString:[NSString stringWithFormat:@"%@",self.Height]];
NSString *Length = [theTextField.text stringByReplacingCharactersInRange:range withString:[NSString stringWithFormat:@"%@",self.Length]];
if (([Width length] > 0) && ([Height length] > 0) && ([Length length] > 0)) self.saveBarButton.enabled = YES;
else self.saveBarButton.enabled = NO;
return YES;
}
当我运行应用程序时,即使我在第一个文本字段中放入一个数字,该按钮也会启用。 为什么会发生这种情况,因为我已经设置了3个条件来启用它,如上所示。
请问任何建议?
答案 0 :(得分:1)
两件事 -
<强>一强>
因为在所有这三种情况下都是
[NSString stringWithFormat:@"%@",self.Height]
解析为null参数。
"(null)"
因此当值为nil
时,长度为6
<强>两个强>
您的测试同时依赖于3条信息,这些信息是相关文本字段的内容。 委托方法一次只提供一件。
一种方法是将文本字段连接到IBOutlets,并在更改发生后读取它们的值。
@property (weak,nonatomic) IBOutlet UITextField *widthTextField;
@property (weak,nonatomic) IBOutlet UITextField *lengthTextField;
@property (weak,nonatomic) IBOutlet UITextField *heightTextField;
...
-(void)textFieldDidBeginEditing:(UITextField *)textField {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:UITextFieldTextDidChangeNotification object:textField];
}
-(void)textFieldDidEndEditing:(UITextField *)textField {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:textField];
}
-(void)textDidChange:(NSNotification *)note {
self.saveBarButton.enabled = self.widthTextField.length > 0 &&
self.lengthTextField.length > 0 &&
self.heightTextField.length > 0;
}
一个无关紧要的风格点;按照惯例,Objective-C变量是低级的,以防止与类名混淆。