我在ios中设计了一个注册表单,其中包含四个UITextField
和一个UIButton
。我默认将按钮“enabled
属性设置为NO
”。现在我只想在填写所有四个文本字段时启用该按钮。你可以帮我解决这个问题,因为我是ios的新手,并坚持这个问题。
答案 0 :(得分:3)
更好的方法是使用didChange
方法,例如UITextViewDelegate
方法,但我们知道UITextFieldDelegate
没有didChange
方法。您可以手动添加行为。您可以使用shouldChangeCharactersInRange:
方法,但我个人建议您不要覆盖方法,除非您绝对不得不这样做。
您可以使用以下方式添加行为:
[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;
}
}
修改强> 此外,如果您想确保它们仅在 中启用,如果用户输入了有效文本而非空格,您可以使用以下内容获取修剪文本,检查此修剪文本是否有长度> 0:
NSUInteger textLength = [myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
答案 1 :(得分:1)
@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
}
}
答案 2 :(得分:1)
我知道这是相对陈旧的,但我想提出另一个想法。我刚刚使用UITextFieldTextDidChangeNotification实现了这个功能。
注册通知:
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("textFieldDidChange:"), name: "UITextFieldTextDidChangeNotification", object: nil)
添加处理通知的方法。 只有在所有文本字段都不为空的情况下才设置按钮的enabled属性为true。 这对于20个文本字段来说不是一个很好的解决方案,但对于2到5个字段来说还不错。
func textFieldDidChange(notification: NSNotification) {
self.button.enabled = self.firstField.text != "" && self.secondField.text != ""
}
每次文本字段的内容发生变化时都会调用该方法,因此按钮会实时响应。
答案 3 :(得分:0)
我会以稍微不同的方式处理这个问题
我不会完全启用/禁用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");
//...
}