2016-06-02 2 views
0

Итак, у меня есть ViewController с тремя UITextFields. Я не хочу, чтобы пользователь мог щелкнуть, если все три UITextFields не равны 0.doneBarButton.enabled with && statement

Это код, который у меня есть. Я не получаю ошибок, но кнопка «Готово» (barButtonItem) остается серой, даже когда я поместил что-то в каждый из трех UITextFields. Что я делаю не так?

func allTextFields(dateTextField: UITextField, numberOfLitersTextField: UITextField, costPerLiterTextField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementsString string: String) -> Bool { 


    let oldText: NSString = dateTextField.text! 
    let oldText2: NSString = numberOfLitersTextField.text! 
    let oldText3: NSString = costPerLiterTextField.text! 
    let newText: NSString = oldText.stringByReplacingCharactersInRange(range, withString: string) 
    let newText2: NSString = oldText2.stringByReplacingCharactersInRange(range, withString: string) 
    let newText3: NSString = oldText3.stringByReplacingCharactersInRange(range, withString: string) 

    doneBarButton.enabled = (newText.length > 0 && newText2.length > 0 && newText3.length > 0) 

    return true 
} 
+0

Когда вы вызываете эту функцию? – ZGski

+0

Поместите точку останова на строку 'doneBarButton.enabled = ...' и посмотрите, что такое значения 'newText',' newText2' и 'newText3'. – rmaddy

+0

@ZGski У меня установлен ViewController как UITextFieldDelegate –

ответ

0

я бы, вероятно, сделать что-то похожее на это вместо:

func validateTextFields() -> Bool { 
    guard 
     let dateText = dateTextField.text, 
     let numberOfLitersText = numberOfLitersTextField.text, 
     let costPerLiterText = costPerLiterTextField.text 
     where !dateText.isEmpty && !numberOfLitersText.isEmpty && !costPerLiterText.isEmpty else { return false } 
    return true 
} 

и просто положить это внутри метода UITextField делегата, что я предполагаю, что вы используете, и просто позвоните

doneBarButton.enabled = validateTextFields()

Я думаю, что будет работать так, как вы этого хотите.