Изменить цвет текста путем оценки текста TextField - PullRequest
0 голосов
/ 22 апреля 2019

Я хочу обновить цвет текста до зеленого на основе проверки. Однако текст shouldChangeCharactersInRange недоступен, пока он не вернет true.

каждый раз, когда только одна строка становится зеленой.

Требование: я хочу сохранить все пройденные условия, изменить их цвет на зеленый и установить его в textView. Если условие не выполняется, конкретное значение должно быть красным.

UITextFieldDelegate Method: 

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
//My Method that validates
    validate(text: textField.text!)
    return true
}


textViewStringArray = [ "• A minimum of 8 characters",
"• At least 1 number",
"• At least 1 Upper case letter",
"• At least 1 Lower case letter",
"• At least 1 of the  following special characters: !,@,#,$,*"]

 func validate(text: String) {

    let smallLetterRegEx  = "[a-z]"
    let capitalLetterRegEx  = "[A-Z]"
    let smallLetterText = NSPredicate(format:"SELF MATCHES %@", smallLetterRegEx)
     if smallLetterText.evaluate(with: password) {

        let str = textViewStringArray.joined(separator: "\n")
        let lowerCaseString = "• At least 1 Lower case letter"
        let range = (str as NSString).range(of: lowerCaseString)
        let attribute = NSMutableAttributedString.init(string: str)
        attribute.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.darkGreen, range: range)
        DispatchQueue.main.async {
            self.textView.attributedText = attribute
        }

        self.view.setNeedsDisplay()
        //label.attributedText = str
    }


    let capitalLetter = NSPredicate(format:"SELF MATCHES %@", capitalLetterRegEx)
    if capitalLetter.evaluate(with: password) {
        let str = textViewStringArray.joined(separator: "\n")
        let lowerCaseString = "• At least 1 Upper case letter"
        let range = (str as NSString).range(of: lowerCaseString)

        DispatchQueue.main.async {
            let attribute = NSMutableAttributedString.init(string: str)
            attribute.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.darkGreen, range: range)
            self.textView.attributedText = attribute
        }



    }

1 Ответ

0 голосов
/ 22 апреля 2019

попробуйте использовать textfielddidbeginediting, чтобы проверить, совпадает ли формат строки с форматом вашей модели, вместо сравнения в "shouldchangecharacter" сделай свою модель такой если string.count> 8 && string.contains и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...