要启用button,如果所有的文本字段都填入了ios

我devise了四个UITextField和一个UIButton的registry单。 我默认设置button的enabled属性为NO 。 现在我只想在填充所有四个文本字段时启用button。 你可以请帮助我,因为我是一个新的ios,并坚持这个问题。

更好的方法是像使用UITextViewDelegate方法一样使用didChange方法,但是我们知道UITextFieldDelegate没有使用didChange方法。 您可以手动添加行为。 你可以使用shouldChangeCharactersInRange:方法,但是我个人build议不要重写方法,除非你绝对必须。

你可以添加行为使用:

 [myTextField1 addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];//And so on for all your text fields 

而在目标方法中:

 - (void)textFieldDidChange:(UITextField*)textField{ if (myTextField1.text.length > 0 && myTextField2.text.length > 0 && myTextField3.text.length > 0 && myTextField4.text.length > 0){ myButton.enabled = YES; } else { myButton.enabled = NO; } } 

编辑:此外,如果你想确保只有当用户input有效的文本,而不是空的空间,他们启用,你可以使用以下来获取修剪的文本,检查这个修剪的文本是否长度> 0:

 NSUInteger textLength = [myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

在你的.h文件中

 @interface YourViewController : UIViewController <UITextFieldDelegate> 

在你的.m文件中

把它写成viewDidLoad

 self.btnSignUp.enable=NO; //button is disable by default self.textField1.delegate=self; // set delegate of text field self.textField2.delegate=self; self.textField3.delegate=self; self.textField4.delegate=self; 

写下这个文本字段的委托方法

 -(void)textFieldDidEndEditing:(UITextField *)textField { if ([textField1.text length]>0 && [textField2.text length]>0 && [textField3.text length]>0 && [textField4.text length]>0) // check if all the textfields are filled { self.btnSignUp.enabled:YES; // enable button here } } 

我知道这是比较旧的,但我想要提出另一个想法。 我刚刚实现了这个使用UITextFieldTextDidChangeNotification。

注册通知:

 NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("textFieldDidChange:"), name: "UITextFieldTextDidChangeNotification", object: nil) 

添加处理通知的方法。 只有在所有文本字段都为空的情况下,才将该button的enabled属性设置为true。 这不会是一个很好的解决scheme,20个文本字段,但2 – 5的罚款。

  func textFieldDidChange(notification: NSNotification) { self.button.enabled = self.firstField.text != "" && self.secondField.text != "" } 

每当文本字段的内容发生更改时,都会调用该方法,因此该button会实时响应。

我会以稍微不同的方式来解决这个问题。
而不是通过启用/禁用UIButton ,我会让UIButton一直启用,让它的目标行动方法决定做什么。

例:

 //Sign Up button method -(IBAction)btnSignUp:(UIButton *)sender { //create a local array of the monitored textFields that should NOT be empty NSArray *arrTextFields = @[txtF1,txtF2,txtF3,txtF4]; //helps quicken the process by using fast-enumeration as so: for (UITextField *txtFCurrent in arrTextFields) { if ([[txtFCurrent.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] isEqualToString:@""]) { NSLog(@"%@ found to be empty",txtFCurrent); //help direct the user to fill it //maybe after showing an alert but anyways... [txtFCurrent becomeFirstResponder]; //don't proceed with the main button logic //since a required textField is empty return; } } //else... NSLog(@"All textfields are go... Proceed with the sign up request"); //... }