2015-11-27 132 views
2

我想跟蹤2 UITextField,如果它們爲空,則完成按鈕被禁用。在viewDidLoad我禁用了按鈕,因爲所有UITextField都是空的。所有文本字段有委託,我跟蹤他們的狀態-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string跟蹤多個UITextField的文本長度

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; 

我知道這是不是最好的跟蹤解決方案,因爲現在我有問題時,有人只刪除字符,字符串是空的,按鈕被禁用。預先感謝您尋找最佳解決方案。

+0

你可以檢查self.textField.text的長度而不是字符串長度,但我建議你使用Reactive Cocoa – Drizztneko

+0

是的,但問題是下一種情況:如果文本字段爲空,我鍵入一個字符,它仍然檢測到它是空的,因爲方法在前一個字符串被新(一個字符)替換之前觸發。 – Stefan

+0

@Stefan當你點擊按鈕時直接檢查不是更好嗎?該按鈕始終處於啓用狀態,當點擊按鈕時,您檢查textField.text.length,如果爲0,則返回uialertview以通知文本字段爲空 – Ilario

回答

2

你不需要委託。您可以連接IBAction爲「編輯做了改變」爲文本字段..和它裏面你做

- (IBAction)textFieldChanged:(UITextField *)sender { 
    [self.loginButton setEnabled:(self.passwordTextField.hasText && self.emailTextField.hasText)]; 
} 
1

你是在正確的軌道上,但變更後,你應該考慮到文本的長度。

這裏有很多關於如何做到這一點的例子。事情是這樣的:

- (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操作(電子郵件文本的紅色,如果它不似乎是有效的...)。但是如果你只需要檢查文本的長度(編輯後),那麼羅伯託斯的回答就會更加優雅。