首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过评估TextField的文本来更改文本颜色

通过评估TextField的文本来更改文本颜色
EN

Stack Overflow用户
提问于 2019-04-23 05:07:15
回答 1查看 0关注 0票数 0

我想根据验证将文本颜色更新为绿色。但是,“shouldChangeCharactersInRange”文本在返回true之前不可用。

每次只有一个字符串设置为绿色。

要求:我想存储所有传递的条件并将它们的颜色更改为绿色并在textView中设置它。如果条件失败,则具体应为红色。

代码语言:javascript
复制
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
        }



    }
EN

回答 1

Stack Overflow用户

发布于 2019-04-23 14:34:36

尝试使用textfielddidbeginediting来检查字符串格式是否等于模型的格式,而不是在“shouldchangecharacter”中比较它,如果string.count> 8 && string.contains等等,请使你的模型如下

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档