如果所有文本字段都填写在ios中,则启用按钮

时间:2014-08-09 06:05:55

标签: ios button uitextfield

我在ios中设计了一个注册表单,其中包含四个UITextField和一个UIButton。我默认将按钮“enabled属性设置为NO”。现在我只想在填写所有四个文本字段时启用该按钮。你可以帮我解决这个问题,因为我是ios的新手,并坚持这个问题。

4 个答案:

答案 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)

你的.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
    }

}

答案 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");
    //...
}