跟踪多个 UITextField 的文本长度
Track multiple UITextField's text length
我想跟踪 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;
我知道这不是跟踪的最佳解决方案,因为现在当有人只删除字符、字符串为空且按钮被禁用时,我遇到了问题。在此先感谢您与我一起寻找最佳解决方案。
您不需要代表。您可以为文本字段连接 IBAction "edit did change".. 并在其中执行
- (IBAction)textFieldChanged:(UITextField *)sender {
[self.loginButton setEnabled:(self.passwordTextField.hasText && self.emailTextField.hasText)];
}
你的思路是正确的,但你应该考虑到更改后的文本长度。
这里有很多关于如何做到这一点的例子。像这样:
- (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 操作(如果电子邮件文本看起来无效,则显示为红色...)。但是,如果您只需要检查文本的长度(编辑后),那么罗伯托斯的回答会更优雅。
我想跟踪 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;
我知道这不是跟踪的最佳解决方案,因为现在当有人只删除字符、字符串为空且按钮被禁用时,我遇到了问题。在此先感谢您与我一起寻找最佳解决方案。
您不需要代表。您可以为文本字段连接 IBAction "edit did change".. 并在其中执行
- (IBAction)textFieldChanged:(UITextField *)sender {
[self.loginButton setEnabled:(self.passwordTextField.hasText && self.emailTextField.hasText)];
}
你的思路是正确的,但你应该考虑到更改后的文本长度。
这里有很多关于如何做到这一点的例子。像这样:
- (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 操作(如果电子邮件文本看起来无效,则显示为红色...)。但是,如果您只需要检查文本的长度(编辑后),那么罗伯托斯的回答会更优雅。