我正在創建一個簡單的 VC 日志。讓我們忽略用戶名和密碼的輸入驗證。我只想在用戶名和密碼的 UITextField 都不為空時啟用 UIButton。每當其中任何一個變為空時,我都希望禁用該按鈕。
@IBAction func typingUserName(_ sender: Any) {
usernameTxtfield.layer.shadowPath = UIBezierPath(rect: usernameTxtfield.bounds).cgPath
usernameTxtfield.layer.shadowRadius = 2
usernameTxtfield.layer.shadowOffset = .zero
usernameTxtfield.layer.shadowOpacity = 0.5
signInIcon.isEnabled = false
}
@IBAction func typingPassword(_ sender: Any) {
passwordTxtfield.layer.shadowPath = UIBezierPath(rect: passwordTxtfield.bounds).cgPath
passwordTxtfield.layer.shadowRadius = 2
passwordTxtfield.layer.shadowOffset = .zero
passwordTxtfield.layer.shadowOpacity = 0.5
signInIcon.isEnabled = false
}
@IBAction func usernameTxtFieldEditingChnged(_ sender: Any) {
usernameTxtfield.layer.shadowRadius = 0
usernameTxtfield.layer.shadowOffset = .zero
usernameTxtfield.layer.shadowOpacity = 0
}
@IBAction func passwordEditingChaned(_ sender: Any) {
passwordTxtfield.layer.shadowRadius = 0
passwordTxtfield.layer.shadowOffset = .zero
passwordTxtfield.layer.shadowOpacity = 0
signInIcon.isEnabled = true
}
@IBAction func signInClicked(_ sender: Any) {
performSegue(withIdentifier: "welcomeVC", sender: signInIcon)
}
如您所見,我僅在密碼文本欄位 EditingChanged 被觸發后才啟用該按鈕。
uj5u.com熱心網友回復:
你可以觀察事件.editingChanged。
passwordTxtfield.addTarget(self, action: #selector(passwordEditingChaned), for: .editingChanged)
usernameTxtfield.addTarget(self, action: #selector(usernameTxtFieldEditingChnged), for: .editingChanged)
然后在這兩種方法中添加檢查:
signInIcon.isEnabled = passwordTxtfield.text?.isEmpty == false && usernameTxtfield.text?.isEmpty == false
uj5u.com熱心網友回復:
你必須實作這樣的東西:
if usernameTxtfield.text != "" && passwordTxtfield.text != "" {
signInIcon.isEnabled = true
} else {
signInIcon.isEnabled = false
}
您在每個 UITextField 的操作中添加這段代碼,您就可以開始了
uj5u.com熱心網友回復:
將textFields和Button的出口連接到 ViewController 類。
@IBOutlet private weak var usernameTxtfield: UITextField!
@IBOutlet private weak var passwordTxtfield: UITextField!
@IBOutlet private weak var signInButton: UIButton!
然后撰寫您的設定功能
private func setupTextFields() {
// write your TextFields custom setup ...
// also add delegate lines
usernameTxtfield.delegate = self
passwordTxtfield.delegate = self
}
你的 setupTextFields 函式來查看VC 的viewDidLoad并設定你的按鈕 isEnable = false
override func viewDidLoad() {
super.viewDidLoad()
setupTextFileds()
setSignInButton(isEnable: false)
}
并撰寫 func 來獲取 textFields。
private func getTextFields() -> [UITextField] {
return [usernameTxtfield, passwordTxtfield]
}
我們還需要檢查這些是否有效。
private func isInputsValid() -> Bool {
var isValid: Bool = true
let inputs: [UITextField] = getTextFields()
if let input = inputs.first(where: { $0.text?.count == 0 }) {
debugPrint("\(input) is not valid.")
isValid = false
}
return isValid
}
還添加 func 來設定 Button
private func setSignInButton(isEnable: Bool) {
signInButton.isEnabled = isEnable
}
然后撰寫 TextField委托函式以了解輸入正在更改并更改按鈕的條件。
extension ViewController: UITextFieldDelegate {
func textFieldDidChangeSelection(_ textField: UITextField) {
setSignInButton(isEnable: isInputsValid())
}
}
我希望它有幫助:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/518202.html
標籤:IOS迅速uikit
