2017-04-19 73 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 
}