2014-09-26 75 views
3

我是iOS新手。 我有一个viewcontroller注册,它包含三个UITextfields电子邮件,密码,确认密码和UIButton。我有一些验证,在验证成功后,我必须启用注册按钮。我通过shouldChangeCharactersInRange实现了它,但它返回了旧字符,例如shouldChangeCharactersInRange返回旧结果iOS

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

它没有得到文本字段值动态怎么想吗?要么 ?

帮助我摆脱这一点。

回答

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

感谢您的帮助l0gg3r – 2014-09-29 10:11:41

0
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 

看看这个方法的名字。它被称为“shouldChange”而不是“hasChanged”。所以当这个方法没有被调用时,textfields的内容还没有更新,但是你可以决定下一个改变是否应该发生。

克劳斯

+0

是否有任何委托方法调用后字符更改? – 2014-09-26 07:49:07

+0

@ MuhammadBurhan检查我的答案,我也修复了禁用的错误(如果用户删除回文本域) – l0gg3r 2014-09-26 07:52:22

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