Как проверить и включить Action в UIAlertController, только если текстовое поле не пустое? - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь выяснить, как сохранить кнопку действия отключенной до тех пор, пока пользователь не введет какой-либо текст, после чего кнопка снова будет активирована. Я искал вокруг, и некоторые люди предлагают использовать Observers? Это был бы лучший способ go?

Приветствия!

   @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)

        }

1 Ответ

1 голос
/ 02 февраля 2020

Использование уведомлений - это способ, но долгая работа вместо этого вы можете использовать простой метод делегата или метод действия текстового поля, который намного проще, как следует:

    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
    }
...