I had multiple images based on the text changes in textfield I need to change the image as selected like when user enter capital letter and small letter and special character and number based on that image get selected ..but I can't change according that. here is my code:
@IBAction func textFieldEditingChanged(_ sender: Any) {
if isValidated(passwordTextField.text!){
print("succ")
}
}
func isValidated(_ password: String) -> Bool {
var lowerCaseLetter: Bool = false
var upperCaseLetter: Bool = false
var digit: Bool = false
var specialCharacter: Bool = false
for char in password.unicodeScalars {
if !lowerCaseLetter {
lowerCaseLetter = CharacterSet.lowercaseLetters.contains(char)
}
if !upperCaseLetter {
upperCaseLetter = CharacterSet.uppercaseLetters.contains(char)
}
if !digit {
digit = CharacterSet.decimalDigits.contains(char)
}
if !specialCharacter {
specialCharacter = CharacterSet.punctuationCharacters.contains(char)
}
}
if (specialCharacter) {
//do what u want
self.SpecialCharacter_img.image = UIImage(named: "GreenTick")
return false
}
if ( digit) {
//do what u want
self.onenumberImageCondiotion_img.image = UIImage(named: "GreenTick")
return false
}
if ( lowerCaseLetter && upperCaseLetter) {
//do what u want
self.UpperCaseImageConditions_img.image = UIImage(named: "GreenTick")
return false
}
else {
self.UpperCaseImageConditions_img.image = UIImage(named: "redtick")
self.SpecialCharacter_img.image = UIImage(named: "redtick")
self.onenumberImageCondiotion_img.image = UIImage(named: "redtick")
return false
}
}
Your code in the isValidated method just needs a little tweaking:
I changed it a little bit and it works in my test project.
func isValidated(_ password: String) -> Bool {
var lowerCaseLetter: Bool = false
var upperCaseLetter: Bool = false
var digit: Bool = false
var specialCharacter: Bool = false
for char in password.unicodeScalars {
if !lowerCaseLetter {
lowerCaseLetter = CharacterSet.lowercaseLetters.contains(char)
}
if !upperCaseLetter {
upperCaseLetter = CharacterSet.uppercaseLetters.contains(char)
}
if !digit {
digit = CharacterSet.decimalDigits.contains(char)
}
if !specialCharacter {
specialCharacter = CharacterSet.punctuationCharacters.contains(char)
}
}
if (lowerCaseLetter) {
lowercaseLabel.text = "✅ Has a lowercase letter"
lowercaseLabel.textColor = .green
lowercaseLabel.sizeToFit()
} else {
lowercaseLabel.text = "Does not have a lowercase letter"
lowercaseLabel.textColor = .red
lowercaseLabel.sizeToFit()
}
if (upperCaseLetter) {
uppercaseLabel.text = "✅ Has an uppercase letter"
uppercaseLabel.textColor = .green
uppercaseLabel.sizeToFit()
} else {
uppercaseLabel.text = "Does not have an uppercase letter"
uppercaseLabel.textColor = .red
uppercaseLabel.sizeToFit()
}
if (specialCharacter) {
specialLabel.text = "✅ Has a special character"
specialLabel.textColor = .green
specialLabel.sizeToFit()
} else {
specialLabel.text = "Does not have a special character"
specialLabel.textColor = .red
specialLabel.sizeToFit()
}
if (digit) {
numberLabel.text = "✅ Has a number"
numberLabel.textColor = .green
numberLabel.sizeToFit()
} else {
numberLabel.text = "Does not have a number"
numberLabel.textColor = .red
numberLabel.sizeToFit()
}
if lowerCaseLetter && upperCaseLetter && digit && specialCharacter {
return true
} else {
return false
}
The last part is important where you have to check that all the conditions are true, or else return false. Also, I removed the return false code in each of the sections where you put '// do what you want' because I don't think the function should return false except at the final check.
Then in the specific 'if statements' where you check for each subcondition being true, add an else statement that will toggle/set your images for either state (e.g. green tick for true, red X for false).
Project Code: https://github.com/Wattholm/PasswordValidator