我想跟踪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;
我知道这不是追踪的最佳解决方案,因为现在当有人只删除字符,字符串为空并且按钮被禁用时,我会遇到问题。在此先感谢我找到最佳解决方案。
答案 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操作(电子邮件文本的红色,如果它看起来没有效果......)。但是如果你只需要检查文本的长度(编辑后),那么罗伯托斯的回答会更优雅。