要启用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"); //... }