我是iOS新手。 我有一个用于注册的viewcontroller,它包含三个用于电子邮件,密码,确认密码和UIButton的 UITextfields 。我有一些验证,在验证成功后我必须启用注册按钮。我已经通过 shouldChangeCharactersInRange 实现了它,但它返回了我的旧字符,例如。
I type a => It returns me ""
then
I type ab => It returns a
then
I remove b => It returns me ab
实际上它是:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([textField.text length]>0) {
[self enableSignUpButton];
}
return YES;
}
-(void)enableSignUpButton {
if ([emailTextField.text length]>0 && [passwordTextfield.text length]>0 && [confirmPasswordTextfield.text length]>0)
signUpButton.enabled=TRUE;
return;
}
signUpButton.enabled=FALSE;
}
我认为没有动态获取文本字段值?还是?
帮助我解决这个问题。
答案 0 :(得分:1)
像这样处理文本更改事件
- (void)viewDidLoad
{
[super viewDidLoad];
[self.textField addTarget:self
action:@selector(textFieldDidChange:)
forControlEvents:UIControlEventEditingChanged];
}
- (void)textFieldDidChange:(UITextField *)aTextField
{
if ([textField.text length]>0)
{
[self enableSignUpButton];
} else {
// NOTE
[self disableSignupButton];
}
}
答案 1 :(得分:1)
如果您想获取更新文本,则必须在 shouldChangeCharactersInRange 方法中添加一行,其中 tempStr 将打印更新的文本
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *tempStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSLog(@"updated Text: %@",tempStr);
if ([tempStr length] > 0) {
[self enableSignUpButton];
}
return YES;
}
答案 2 :(得分:0)
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
看看这个方法的名称。它被称为" shouldChange"不是" hasChanged"。因此,当调用此方法时,文本字段内容尚未更新,但您可以决定是否应该进行下一次更改。
克劳斯
答案 3 :(得分:0)
您需要先在现有文本中附加新字符串,然后比较长度
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength = [textField.text length] + [string length] - range.length;
if (newLength>0) {
[self enableSignUpButton];
}
return YES;
}