跟踪多个UITextField的文本长度

时间:2015-11-27 09:15:16

标签: ios objective-c iphone uitextfield

我想跟踪2 UITextField,如果它们为空,则禁用完成按钮。在viewDidLoad我已禁用按钮,因为所有UITextField都是空的。所有文本字段都有委托,我在-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

中跟踪其状态
if (textField == self.emailTextField) {
        if (self.passwordTextField.hasText && [string length] > 0) {
            [self.loginButton setEnabled:YES];
        }
        else {
            [self.loginButton setEnabled:NO];
        }
    }
    else if (textField == self.passwordTextField) {
        if (self.emailTextField.hasText && [string length] > 0) {
            [self.loginButton setEnabled:YES];
        }
        else {
            [self.loginButton setEnabled:NO];
        }
    }

    return YES;

我知道这不是追踪的最佳解决方案,因为现在当有人只删除字符,字符串为空并且按钮被禁用时,我会遇到问题。在此先感谢我找到最佳解决方案。

2 个答案:

答案 0 :(得分:2)

您不需要代理人。您可以连接IBAction“编辑确实更改”文本字段..并在其中进行

- (IBAction)textFieldChanged:(UITextField *)sender {
    [self.loginButton setEnabled:(self.passwordTextField.hasText && self.emailTextField.hasText)];
}

答案 1 :(得分:1)

您走在正确的轨道上,但是您应该考虑更改后文本的长度。

这里有很多关于如何做到这一点的例子。像这样:

- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
    NSString *resultString = [textField.text stringByReplacingCharactersInRange:range
                                                                     withString:string];

    size_t emailLen = [textField isEqual:_emailTextField] ? 
        resultString.text.length : _emailTextField.text.length;

    size_t pwdLen = [textField isEqual:_passwordTextField] ? 
        resultString.text.length : _passwordTextField.text.length;

    self.loginButton.enabled = emailLen && pwdLen;

    return YES;
}

在此方法中,还可以执行一些UI操作(电子邮件文本的红色,如果它看起来没有效果......)。但是如果你只需要检查文本的长度(编辑后),那么罗伯托斯的回答会更优雅。