Ios 应在返回旧结果的范围内更改字符

Ios 应在返回旧结果的范围内更改字符,ios,objective-c,uitextfield,Ios,Objective C,Uitextfield,我是iOS新手。 我有一个用于注册的viewcontroller,它包含三个UITextfields用于电子邮件、密码、确认密码和一个UIButton。我有一些验证,在这些验证成功后,我必须启用注册按钮。我已经通过shouldChangeCharactersInRange实现了它,但它会返回旧字符,例如 I type a => It returns me "" then I type ab => It returns a then I remove b => It retu

我是iOS新手。 我有一个用于注册的viewcontroller,它包含三个UITextfields用于电子邮件、密码、确认密码和一个UIButton。我有一些验证,在这些验证成功后,我必须启用注册按钮。我已经通过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;
}
我认为它不是动态地获取textfield值?还是

帮我摆脱这一切

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range  replacementString:(NSString *)string
看看这个方法的名称。它被称为“应该改变”而不是“已经改变”。因此,当调用此方法时,textfields内容尚未更新,但您可以决定是否进行下一次更改


Claus

您需要首先在现有文本中附加新字符串,然后比较长度

- (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;
}

像这样处理文本更改事件

- (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];
    }
}

如果要获取更新文本,必须在shouldChangeCharactersRange方法中添加一行,这样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;
}

字符更改后没有调用任何委托方法吗???@MuhammadBurhan检查我的答案,我还修复了禁用的错误(如果用户删除了back textfield),感谢您的帮助l0gg3r