web-dev-qa-db-fra.com

Le type 'NSNotification.Name' n'a pas de membre 'UITextField'

Avec Swift 4.2, obtenir l’erreur suivante, cela fonctionnait bien avec Swift 4.

Le type 'NSNotification.Name' n'a pas de membre 'UITextField'

Voici mon code d'erreur.

NotificationCenter.default.addObserver(forName: NSNotification.Name.UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main) { (notification) in
            loginAction.isEnabled = textField.text != ""
        }

Code complet:

@IBAction func alertWithLogin(){

    let alertController = UIAlertController(title: "Please Enter Credential", message: nil, preferredStyle: .alert)

    // ADD ACTIONS HANDLER
    let loginAction = UIAlertAction(title: "Login", style: .default) { (_) in

        let loginTextField = alertController.textFields![0] as UITextField
        let passwordTextField = alertController.textFields![1] as UITextField

        // do something with after login
    }
    loginAction.isEnabled = false
    alertController.addAction(loginAction)

    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (_) in
        // do something
    }
    alertController.addAction(cancelAction)

    // ADD TEXT FIELDS
    alertController.addTextField { (textField) in
        textField.placeholder = "Email"
    }
    alertController.addTextField { (textField) in
        textField.placeholder = "Password"
        textField.isSecureTextEntry = true

        // enable login button when password is entered
        NotificationCenter.default.addObserver(forName: NSNotification.Name.UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main) { (notification) in
            loginAction.isEnabled = textField.text != ""
        }
    }

    // PRESENT
    present(alertController, animated: true)
}

 enter image description here

6
Krunal

textDidChangeNotification est un membre de UITextField (et UITextView).

NotificationCenter.default.addObserver(
    self,
    selector: #selector(self.keyboardDidShow(notification:)),
    name: UITextField.textDidChangeNotification,
    object: nil)
21
rmaddy
        NotificationCenter.default.addObserver(forName: Notification.Name.UITextFieldTextDidChange, object: textField, queue: OperationQueue.main) { (notification) in
            //...
    }

Dans Swift sdk, tout nom de notification devrait être l'extension de struct: Notification.Name

Ainsi, lorsque vous utilisez Notification.Name, vous devez ignorer le nom de la classe (exc.UITextField) et saisir "Notification.Name". puis entrez une partie de votre nom (comme "TextF") et utilisez esc pour afficher la saisie semi-automatique

1
Sven Shao