swift 验证失败时,在 UITextField 中自动显示错误图标

Posted

技术标签:

【中文标题】swift 验证失败时,在 UITextField 中自动显示错误图标【英文标题】:Show error icon automatically in UITextField when validation is failed in swift 【发布时间】:2016-06-30 00:50:38 【问题描述】:

我希望当 swift 中的一项验证失败时,错误图标图像将自动显示在 UITextField 中。

这是正常阶段

这是验证失败时的错误阶段

对于那个 UITextField,我创建了自定义 UITextField,如下所示

class OvalTextField: UITextField 

    required init(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)!
        createBorder()
    

    required override init(frame: CGRect) 
        super.init(frame: frame)
        createBorder()
    

    func createBorder()

        let errorImg = UIImageView (frame: CGRectMake(0, 0, 30, 30))
        errorImg.image = UIImage(named: "error")
        errorImg.contentMode = UIViewContentMode.Left

        self.layer.borderWidth = 1.0
        self.layer.borderColor = UIColor(red:0.93, green:0.93, blue:0.93, alpha:1.0).CGColor
        self.layer.cornerRadius = self.frame.size.height / 2
        self.layer.masksToBounds = true

        let gapLabel = UIView (frame: CGRectMake(60, 0, 10, 40))
        self.leftView = gapLabel
        self.leftViewMode = UITextFieldViewMode.Always

        /* Display that one when validation is failed */
        self.rightView = errorImg;
        self.rightViewMode = UITextFieldViewMode.Always
    

并在 ViewController 中使用了 UITextField,

@IBOutlet var txtEmail: OvalTextField!

如果该 txtEmail 为空或无效的电子邮件地址,我想显示错误图标消息。

请建议我怎么做。提前致谢。

【问题讨论】:

这取决于您何时执行验证;您可以使用文本字段委托将其更新为人员类型,或者您可以在他们保存/提交表单时执行验证 我能问一下clearButtonMode 设置在这里可以使用吗? 【参考方案1】:

您可以使用 UITextFiledDelegate 方法 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool 在用户输入时验证电子邮件。

    先设置委托,txtEmail.delegate = self,然后

    实现委托方法

    func textField(textField: UITextField, shouldChangeCharactersInRange  range: NSRange, replacementString string: String) -> Bool 
    
        let email = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
    
        if /* email is validate */ 
            textField.rightView?.hidden = false
         else 
            textField.rightView?.hidden = true
        
    
        return true
    

【讨论】:

【参考方案2】:
func validated() -> Bool 
    var valid: Bool = true
    if ((txt_EmailID.text?.isEmpty) != nil)
        // change placeholder color to red color for textfield email-id
        txt_EmailID.attributedPlaceholder = NSAttributedString(string: "Please enter Your Email ID", attributes: [NSForegroundColorAttributeName: UIColor.redColor()])
        valid = false
    
    if ((txt_UserName.text?.isEmpty) != nil)
        // change placeholder color to red for textfield username
        txt_UserName.attributedPlaceholder = NSAttributedString(string:"Please enter User Name",attributes: [NSForegroundColorAttributeName: UIColor.redColor()])
        valid = false
    
    if ((txt_Password.text?.isEmpty) != nil)
        // change placeholder color to red for textfield password
        txt_Password.attributedPlaceholder = NSAttributedString(string:"Please enter Password",attributes: [NSForegroundColorAttributeName:UIColor.redColor()])
        valid = false
    
    if ((txt_MobileNo.text?.isEmpty) != nil)
        // change placeholder color to red for textfield mobile no.
        txt_MobileNo.attributedPlaceholder = NSAttributedString(string: "Please enter Mobile no.",attributes: [NSForegroundColorAttributeName: UIColor.redColor()])
        valid = false
    
    return valid

【讨论】:

以上是关于swift 验证失败时,在 UITextField 中自动显示错误图标的主要内容,如果未能解决你的问题,请参考以下文章

Swift 在文本输入期间验证 2 uitextfield 密码

swift4中的UITextfield验证 - 动态单元格

如何创建 OTP 验证屏幕并在多个 uitextfield 上向后检测删除是 Swift

按下按钮后 UIAlert 验证中的 Swift3 UITextField

如何在iOS swift 4中进行名字验证?

Swift:点击 UITextField 时如何显示 UIPickerView