2014-09-26 92 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; 
}