2017-04-19 72 views
0

我有4个textfields,一个按钮和一个图像,我试图实现的是,当按钮被按下时,它应该警告用户有空的textfields并显示图像指向空的textfield(s),但当用户将文本放入空的文本字段时,使图像消失。谢谢如何仅当textfield为空时显示图像?

这里是我的FUNC

func checkFields(){ 
    let userEmail = user_EmailTxtField.text! 
    let userPassword = user_PassTxtField.text! 
    let passwordConfirm = pass_ConfirmTxtField.text! 
    let userPhone = user_PhoneTxtField.text! 
    //Set backArrow image to show input error to password 
    let imageName = "backArrow.png" 
    let image = UIImage(named: imageName) 
    let passImageView1 = UIImageView(image: image!) 
    passImageView1.frame = CGRect(x: 319, y: 331, width: 49, height: 49) 
    view.addSubview(passImageView1) 
    //Show Arrow image to password confirm error 
    let passConfirmImageView1 = UIImageView(image: image!) 
    passConfirmImageView1.frame = CGRect(x: 319, y: 394, width: 49, height: 49) 
    view.addSubview(passConfirmImageView1) 
    //Show arrow Image to email error 
    let emailImageView1 = UIImageView(image: image!) 
    emailImageView1.frame = CGRect(x: 319, y: 270, width: 49, height: 49) 
    view.addSubview(emailImageView1) 
    //Set image to phonetxt field error 
    let phoneImageView1 = UIImageView(image: image!) 
    phoneImageView1.frame = CGRect(x: 319, y: 209, width: 49, height: 49) 
    view.addSubview(phoneImageView1) 
    if userPhone.isEmpty { 
     phoneImageView1.isHidden = false 
    } else { 
     phoneImageView1.isHidden = true 
    } 
    if userEmail.isEmpty { 
     emailImageView1.isHidden = false 
    } 
    if userPassword.isEmpty { 
     passImageView1.isHidden = false 
    } 
    if passwordConfirm.isEmpty { 
     passConfirmImageView1.isHidden = false 
    } 
} 

回答

0

你可以打电话,你处理你的支票,然后隐藏图像的功能,如果我的文字sn't空这样的:

在这个地方添加一个目标到你的文本框,你创建它们的事件.editingChanged

user_EmailTxtField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged) 
user_PhoneTxtField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged) 
pass_ConfirmTxtField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged) 
pass_ConfirmTxtField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged) 

设置的方法,你用它来检查,如果该文本框得到编辑:

func textFieldDidChange() { 
    emailImageView1.isHidden = user_EmailTxtField.hasText 
    phoneImageView1.isHidden = user_PhoneTxtField.hasText 
    passImageView1.isHidden = pass_ConfirmTxtField.hasText 
    passConfirmImageView1.isHidden = pass_ConfirmTxtField.hasText 
} 

所以,如果你申请这个例子中的所有文本字段,你不需要在checkFields()的检查,你可以耶南你e的方法setupTextFields()例如使用它只是作为创建文本字段的

示例使用您的图像视图中在类的所有方法,但一定要在viewDidLoad()初始化例如,以避免无发现错误而展开一个可选值

class YourClass: UIViewController { 

    // ImageView Reference 
    var emailImageView1: UIImageView! 

    // then your checkFields method 
    func checkFields() { 
    // code before 
    emailImageView1 = UIImageView(image: image!) 
    // code after 
    } 
} 
+0

我已经尝试过这一点,但它给我一个错误说“不能呼吁textInput.isempty线 – SCS

+0

非功能型‘布尔’的价值,你可以检查,如果你用我的最新的更新的答案。更新它相当多 – ronatory

+1

@SCS你可以检查你的'if!user_EmailTxtField.hasText'甚至更好'emailImageView1.isHidden = user_EmailTxtField.hasText' –

0

你应该分开图像(addSubview)和检查

把创建到viewDidLoad

,后来检查领域的创建和隐藏或显示它。

刚才您创建的每一个时间,这是放置在前面创建的图像的新图像(你可以检查这个,如果你切换到线框3D调试视图)

0

而不是检查if userPhone.isEmpty的,你应该尝试:

if user_EmailTxtField.text == nil { 
    phoneImageView1.isHidden = false 
} 

你甚至可以这样做:

if user_EmailTxtField.text == nil || user_EmailTxtField.text == "" { 
     phoneImageView1.isHidden = false 
}