仅当文本字段不为空时,如何在 UIAlertController 中检查和启用 Action?

How to check and enable Action in a UIAlertController only if the textfield is not empty?

我正在尝试弄清楚如何让操作按钮保持禁用状态,直到用户输入一些文本,此时按钮将再次启用。我一直在四处寻找,有些人建议使用观察者?那是最好的方法吗?

干杯!

   @objc func addExercise() {
            var textField = UITextField()
            let alert = UIAlertController(title: "New Exercise", message: "Please name your Exercise...", preferredStyle: .alert)

            let cancelAction = UIAlertAction(title: "Cancel", style: .default) { (UIAlertAction) in
                alert.dismiss(animated: true, completion: nil)
            }

            let addAction = UIAlertAction(title: "Add Exercise", style: .default) { (UIAlertAction) in
                //Add Exercise to database.
                //Append exercise to selected workout object.
                let exercise = Exercises()
                exercise.exerciseName = textField.text!
                try! self.realm.write {
                    self.selectedWorkout?.exercise.append(exercise)
                    self.loadExercises()
                }
            }

            alert.addTextField { (alertTextField1) in
                alertTextField1.delegate = self
                alertTextField1.placeholder = "Bench Press"
                alertTextField1.text = textField.text
                textField = alertTextField1
            }

            alert.addAction(addAction)
            alert.addAction(cancelAction)

            present(alert, animated: true, completion: nil)

        }

使用通知是一种方法,但工作时间长,您可以使用简单的委托方法或文本字段的操作方法,这更容易,如下所示:

    weak var buttonActionToEnable: UIAlertAction?

    alert.addTextField { (alertTextField1) in
                    alertTextField1.delegate = self
                    alertTextField1.placeholder = "Bench Press"
                    alertTextField1.text = textField.text

                    alertTextField1.addTarget(self, action: #selector(self.textFieldChanged), for: .editingChanged)
                }

    self.buttonActionToEnable = addAction
    addAction.isEnabled = false

    @objc func textFieldChanged(_ sender: Any) {

          let textfield = sender as UITextField
          self.buttonActionToEnable?.isEnabled = textfield.text.count > 0
    }