私は2つのテキストフィールドを持つViewControllerを持っています。 View ControllerはUITextFieldDelegateです。私はこのフィールドから値をチェックし、有効であれば、このView Controllerボタンからの戻り値を有効にします。問題は、2番目の文字から検証が始まることです。各フィールドに値を入力しようとすると、2番目の文字を入力するまでボタンが非アクティブになりますが、入力した後にこの文字を削除すると戻ります。問題が発生したのはcheckIfAddingAvailable()
です。どこが間違っているの?テキストフィールドがまだSwift UITextFieldは2番目の文字からテキストをチェックします
を最終テキストを持っていないので、
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let oldTextString = textField.text else {
return true
}
let oldText = oldTextString as NSString
let newString = oldText.replacingCharacters(in: range, with: string) as NSString
if newString.length > 0 {
let _ = checkIfAddingAvailable()
} else {
addFoodButton.isEnabled = false
}
return true
}
func checkIfAddingAvailable() -> Bool {
//TODO: implement valid checking of posibility to add food
guard let foodName = foodNameField.text else { return false }
guard !foodName.isEmpty else {
return false
}
guard let foodShelfLife = shelfLifeField.text else { return false }
guard !foodShelfLife.isEmpty else {
return false
}
guard let foodShelfLifeIntoDouble = Double(foodShelfLife) else { return false }
guard foodShelfLifeIntoDouble > 0 else {
return false
}
addFoodButton.isEnabled = true
return true
}
checkIfAddingAvailableにnewString Stringを渡す必要があります –